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

Vih*_*har 3 excel vba copy range excel-vba

我想在VBA中运行执行以下操作的代码:

  • 复制名为"Kommentar"的工作表的使用范围
  • 在ThisWorkbook所在的目录中创建".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
Run Code Online (Sandbox Code Playgroud)

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

有任何想法吗?谢谢!

Oll*_*ren 5

由于您的范围可能由多个单元格组成,因此您必须遍历它们以将所有文本转换为字符串变量.如果使用Variant变量,则可以复制值并自动获取具有单元格中所有数据的正确尺寸的数组,然后循环并复制文本:

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
Run Code Online (Sandbox Code Playgroud)

通过a.WriteLine (rng)使用以下代码替换代码来调用代码中的函数:

Dim sRange As String
sRange = GetTextFromRangeText(rng)
Call a.WriteLine(sRange)
Run Code Online (Sandbox Code Playgroud)