3

我想要:

  • 复制名为“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

我明白了

运行时错误“13”不匹配

a.WriteLine (rng)函数不接受要写入的范围。

4

4 回答 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)
于 2013-05-06T09:50:55.003 回答
2

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

这是另一种选择。
您可以尝试将工作表另存为 .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
于 2013-05-06T10:11:22.270 回答
0

@xwhitelight 给出了一个很好的大纲。谢谢。但我需要向自己提供细节来完成我自己的任务,并认为我会分享。

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

下面是我添加以生成输出文件的编码细节。

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

请注意,它textfilename是在 的最后一行打开的sub,这不是必需的,但可以放心查看文件包含的内容。当然,这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
于 2021-07-27T02:19:31.663 回答
0

假设yourRange您要复制为字符串的范围。

  1. 使用yourRange. 复制以复制它。
  2. 复制后,Excel 会将文本值保存到剪贴板。一行中的单元格由制表符分隔,每一行都以回车符结尾。您可以使用 DataObject 的GetFromClipboardandGetText方法将其保存到字符串变量中。
  3. 用于CreateTextFile将其保存到文件中。
于 2019-11-04T12:59:49.983 回答