【问题标题】:How to select range of cells, from first non-black to last non-blank cell (VBA)?如何选择单元格范围,从第一个非黑色到最后一个非空白单元格(VBA)?
【发布时间】:2016-09-20 06:37:39
【问题描述】:

我正在尝试将表格从 excel 工作簿导出到以管道分隔的 txt 文件,这些文件的命名方式与相应的工作表相同。问题是我无法让我的宏遍历工作簿中的不同工作表以将所有非空白单元格导出到 txt 文件。以下是我的代码:

Sub TableExtract()

Dim myFile As String, WS_Count As Integer, x As Integer, rng As Range, cellValue As Variant, i As Integer, j As Integer

WS_Count = ActiveWorkbook.Worksheets.Count
For x = 1 To WS_Count

    myFile = "C:\Users\mohamednuri.beitelma\Desktop\" & ActiveSheet.Name & ".txt"

    Set rng = Sheets(x).Range("A1").CurrentRegion
    Open myFile For Output As #1

    For i = 1 To rng.Rows.Count
        For j = 1 To rng.Columns.Count

            cellValue = rng.Cells(i, j).Value

            If j = rng.Columns.Count Then
                Print #1, cellValue
            Else
                Print #1, cellValue & "|",
            End If

            Next j
        Next i
    Close #1
Next x

End Sub

此代码返回错误。知道如何选择第一个和最后一个非空白单元格之间范围内的所有内容并将其导出吗?

【问题讨论】:

  • 你能显示你得到的错误吗?

标签: vba excel export visual-studio-macros


【解决方案1】:

使用当前区域属性:

Set rng = Range("A1").CurrentRegion

这是选择A1并按下Ctrl + A

的等价物

您的错误是因为您将行号和列号分配给 Range 方法,您应该在其中有一个地址或一个开始/结束单元格:

'// lets assume row = 5
row = Range("A" & Rows.Count).End(xlUp).row

'// lets assume col = 10
col = Cells(1, Cells.Columns.Count).End(xlToLeft).Column

'// this will produce Range(5, 10) <~~ invalid syntax
Range(row, col).Select

'// consider instead:
Set rng = Range(Cells(1, 1), Cells(row, col))
'// or use the .CurrentRegion property as mentioned above if there are no gaps in your data.

【讨论】:

  • 这行得通,但由于某种原因,它不会遍历工作表。它只导出我目前使用的那个。我已经编辑了上面的代码以反映当前的区域属性。有什么想法吗?
  • 您需要使用工作表对象限定范围,否则它将默认为AcitveSheet。而不是Set rng = Range("A1").CurrentRegion 使用Set rng = Sheets(x).Range("A1").CurrentRegion
  • 我已经做到了,但我得到的唯一输出是第一张纸的输出。我基本上在表 1 中有一个表,在表 2 中有一个不同的表。我想将每个表导出到一个单独的 txt 文件中,但目前我只能得到一个(我目前使用的那个)。
  • 对不起@Macro Man,我在宏上更新了它,但在这篇文章中没有。我刚刚更新了它。还是一样的问题。有什么想法吗?
  • 您的所有数据都将进入同一个文件 - 将 myFile = "C:\Users\mohamednuri.beitelma\Desktop\" &amp; ActiveSheet.Name &amp; ".txt" 更改为 myFile = "C:\Users\mohamednuri.beitelma\Desktop\" &amp; Sheets(x).Name &amp; ".txt"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多