VBA将使用的范围复制到文本文件

我想在VBA中运行一个代码,执行以下操作:

  • 复制名为“Kommentar”的表单的已用范围
  • 在与ThisWorkbook相同的目录中创build一个“.txt”文件(“Kommentar.txt”)
  • 粘贴以前复制的使用范围
  • 保存“.txt”文件

我到现在为止是:

Sub CreateAfile() Dim pth As String pth = ThisWorkbook.path Dim fs As Object Set fs = CreateObject("Scripting.FileSystemObject") Dim a As Object Set a = fs.CreateTextFile(pth & "\Kommentar.txt", True) Dim sh As Worksheet Set sh = ThisWorkbook.Sheets("Kommentar") Dim rng As Range Set rng = sh.UsedRange a.WriteLine (rng) a.Close End Sub 

我得到一个运行时错误'13'不匹配,如在“a.WriteLine(rng)”行,该函数不接受范围被写入。

有任何想法吗? 谢谢!

由于你的范围可能是由几个单元格组成的,所以你必须循环遍历它们才能将所有的文本变成一个stringvariables。 如果使用Variantvariables,则可以复制值并自动获取单元格中所有数据的正确尺寸的数组,然后循环并复制文本:

 Function GetTextFromRangeText(ByVal poRange As Range) As String Dim vRange As Variant Dim sRet As String Dim i As Integer Dim j As Integer If Not poRange Is Nothing Then vRange = poRange For i = LBound(vRange) To UBound(vRange) For j = LBound(vRange, 2) To UBound(vRange, 2) sRet = sRet & vRange(i, j) Next j sRet = sRet & vbCrLf Next i End If GetTextFromRangeText = sRet End Function 

通过将a.WriteLine (rng)行replace为以下代码来调用代码中的函数:

 Dim sRange As String sRange = GetTextFromRangeText(rng) Call a.WriteLine(sRange) 

不知道你能做到这一点。 我相信你将不得不逐行写出来。

这是另一种select。
您可以尝试将表格保存为.txt文件,而不是使用FSO。 这是一些示例代码。 信用应该转到http://goo.gl/mEHVx

 Option Explicit 'Copy the contents of a worksheet, and save it as a new workbook as a .txt file Sub Kommentar_Tab() Dim wbSource As Workbook Dim wsSource As Worksheet Dim wbDest As Workbook Dim fName As String 'References Set wbSource = ActiveWorkbook Set wsSource = ThisWorkbook.Sheets("Kommentar") Set wbDest = Workbooks.Add 'Copy range on original sheet 'Using usedrange can be risky and may return the wrong result. wsSource.UsedRange.Copy 'Save in new workbook wbDest.Worksheets(1).Cells(1, 1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats Application.CutCopyMode = False 'Get file name and location fName = ThisWorkbook.Path & "\Kommentar.txt" 'Save new tab delimited file wbDest.SaveAs fName, xlText wbDest.Close SaveChanges:=True End Sub