为每个循环使用Range Cells和UsedRange

时间:2015-01-25 22:10:55

标签: excel excel-vba foreach range vba

我在xlsx中有数据库提取。我写了一个代码,遍历工作表并将单个单元格/字段写入管道分隔的文本文件。首先,有一个问题是代码忽略了以“blank”值开头的行之后的所有行。我使用UsedRange纠正了这个问题。然后,另一个问题开始了 - 文件有“固定”列数,但有时候,最后3个单元格是空白的。在这种情况下,它不起作用 - 它最后忽略空白单元格。

我认为问题是每个循环的第二行(使用myField);我花了5个小时谷歌搜索,使用帮助,尝试不同的组合与范围,单元格,结束(xxx),无法解决它。有人可以帮忙吗?

最后,代码必须遍历整个矩阵,但在第一列和最后一列中可能都有空白值。

我粘贴下面的部分代码。

    For Each myRecord In myWkSheet.Range("A1:A" & myWkSheet.UsedRange.Rows.Count)
    With myRecord
        For Each myField In myWkSheet.Range(.Cells, myWkSheet.Cells(.Row, myWkSheet.Columns.Count).End(xlToLeft))
        RplcText = myField.Text
        RplcText = Replace(RplcText, "|", "/") 'Replaces pipes from input file to slashes to avoid mismatches during ETL
        sOut = sOut & RplcText & DELIMITER
        Next myField
        OUTFILE_WRITELINE sOut
        sOut = Empty
    End With
Next myRecord`

1 个答案:

答案 0 :(得分:1)

如果第一行中有一组标题标签,则使用.CurrentRegion。见Range.CurrentRegion Property (Excel)

dim totalRows as long, totalColumns as long, dataRange as range
with sheets("sheet1").cells(1, 1).currentregion
  totalRows = .rows.count
  totalColumns = .columns.count
  set dataRange = .offset(1, 0).resize(.rows.count -1, .columns.count)  'no header row
end with