VBA打印1选择范围(用于从Excel导出到文件)?

VBA打印1选择范围(用于从Excel导出到文件)?,excel,vba,export,Excel,Vba,Export,我有一个简单的宏,可以将所需的单元格导出到txt文件。我可以选择一系列单元格,而不是单独告诉宏要导出哪些单元格吗 下面是我所拥有的非常简单的代码: Sub TEST() Open "C:\text.txt" For Output As #1 Print #1, Cells(1, 1) & Cells(1, 2) Close End Sub 有了它,我可以导出Excel表格单元格A1、A2。但是如果我想导出大范围的单元格,这种方法就不太方便了。那么

我有一个简单的宏,可以将所需的单元格导出到txt文件。我可以选择一系列单元格,而不是单独告诉宏要导出哪些单元格吗

下面是我所拥有的非常简单的代码:

Sub TEST()
    Open "C:\text.txt" For Output As #1
        Print #1, Cells(1, 1) & Cells(1, 2)
        Close
End Sub
有了它,我可以导出Excel表格单元格A1、A2。但是如果我想导出大范围的单元格,这种方法就不太方便了。那么,有没有一种方法可以轻松导出单元格A1:A100

谢谢

您可以使用InputBox并将类型设置为8,这将允许用户在Excel中单击并选择一个范围

以下是一个例子:

Sub test()
    Dim r As Excel.Range, cell As Excel.Range
    On Error Resume Next
    Set r = Application.InputBox("Select Range", "Select Range", Type:=8)
    On Error GoTo 0
    If r Is Nothing Then Exit Sub

    Open "C:\text.txt" For Output As #1
    For Each cell In r
        Print #1, cell.Value
    Next
    Close
End Sub

我知道joseph4tw已经回答了,但我的回答有点不同,可能会给你另一个想法,所以我还是把它放在这里

Sub TEST()
    Dim c As Range, r As Range
    Dim output As String
    For Each r In Range("A1:C3").Rows
        For Each c In r.Cells
            output = output & c.Value & ","
        Next c
        output = output & vbNewLine
    Next r
    Open "H:\My Documents\text.txt" For Output As #1
    Print #1, output
    Close
End Sub

如果要选择所有非空单元格,请使用以下选项:

Range("A1").CurrentRegion.Select

然后你可以用你喜欢的任何方式输出它

我注意到mkingston的示例将逗号放在第一位。这将导致.csv的第二列中的所有内容开始。第一列将为空。最好在语句末尾加逗号。您可以使用REPLACE删除最后一个“”,但这不是必需的

   Dim c As range, r As range
        Dim output As String
        For Each r In range(DataRange).Rows
            For Each c In r.Cells
                output = output & c.Value & ","
            Next c
            output = output & vbNewLine

        Next r

有没有办法在宏本身中输入范围?这是一个很好的解决方案,但在我的例子中,我用这种宏导出了数百个txt文件,因此我不得不多次选择范围。我只是好奇,为什么指定Excel.range而不是仅仅指定范围?我认为这是非常明智的,但对您的推理感到疑惑:@user2084296您只需要在@joseph4tw的示例中为r变量指定范围即可。@mkingston,我不久前读过一篇文章,谈到如果您完全限定对象,代码将如何编译/运行得更快,我刚刚习惯了。引用的内容是:如果使用泛型对象数据类型声明变量和参数,Visual Basic在运行时遇到对其属性和方法的引用时,可能必须解析这些属性和方法的引用,从而导致进程大大减慢。@mkingston我同意将代码从一个Office产品移动到另一个Office产品会更容易。一般来说,当我编写代码时,我喜欢非常明确,即使是对于I=1到10。。。下一个我就在下一个你不需要放的地方。我也发现以后更容易维护。感谢您提供此解决方案。我正要更改我的答案,但我意识到这对于OP来说是完美的:输出文本文件有一个前导逗号分隔符。我们怎样才能通过同样的脚本摆脱它呢?请看这里:感谢作者!。我将编辑我的答案,因为我认为这对任何人来说都是不受欢迎的行为。