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

3

我想要:

  • 复制名为“Kommentar”的工作表使用的范围
  • 在与此工作簿相同的目录中创建一个“.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) 中,该函数不能接受要写入的区域范围。


2
使用带有字符串参数的Writeln语句,您必须逐个单元格地获取值。 - matzone
4个回答

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

通过将a.WriteLine(rng)行替换为以下内容,在您的代码中调用该函数:

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

2

我不确定你能做到这一点。我相信你必须逐行编写它。

以下是另一个选择。
与其使用FSO,您可以尝试将工作表保存为.txt文件。 下面是一些示例代码。 此代码来自 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

0

假设yourRange是您想要以字符串形式复制的范围。

  1. 使用yourRange。Copy来复制它。
  2. 在您复制后,Excel会将文本值保存到剪贴板中。一行中的单元格由制表符分隔,并且每行以换行符结束。您可以使用DataObject的GetFromClipboardGetText方法将其保存到字符串变量中。
  3. 使用CreateTextFile将其保存到文件中。

0

@xwhitelight提供了很好的概述。谢谢。但是我需要为自己提供细节以完成自己的任务,所以我想分享。

首先,需要引用Microsoft Scripting Runtime和另一个引用Microsoft Forms 2.0 Object Library

我添加的编码细节如下,用于生成输出文件。

请注意,textfilename是包含电子表格范围的输出文件的完全限定名称

请注意,在sub的最后一行中打开了textfilename,这不是必要的,但看到文件的内容是令人放心的。当然,MsgBox也是不必要的。

Sub turnRangeIntoTextFile(rg As Range, textfilename As String)

  Dim textFile as TextStream

  Dim fs As FileSystemObject
  Dim myData As DataObject

  Set myData = New DataObject
  Set fs = CreateObject("Scripting.FileSystemObject")

  rg.Copy
  myData.GetFromClipboard
  MsgBox myData.GetText ' reassurance (see what I got)

  Set textFile = fs.CreateTextFile(textfilename, True)
  textFile.WriteLine (myData.GetText)
  textFile.Close

  CreateObject("Shell.Application").Open (textfilename)

End Sub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接