对于范围中的每一行 - 不正确的行迭代

时间:2014-08-11 17:37:48

标签: excel-vba foreach transpose vba excel

我在Excel中从多行/单元源数据创建单列索引文件。我在一个工作簿中有两个工作表 - 源和目标。迭代源工作表中的每一行(开发中11个,生成中约15,000个)我写的For Each循环应该:

  • 在目标工作表的列A中找到第一个空单元格
  • 使用LastCell.Value =在该单元格中输入设定值
  • 使用LastCell.Offset(r, c).Value =将设置值与源工作表的单行中每个单元格的复制值配对到下一个目标单元格。有八个要复制,第九个被设置

循环完美地一次,然后无法迭代到下一行。每个后续循环将复制的值向上移动一个,并使用空白保留设定值。它对源行中的每个单元格执行一次,并且仅在此之后才会向下移动到下一行。

当我说设定值时,我指的是引号中的内容,复制的值是Row.Offset的值。

代码是:

Sub Export_Index_File()

Dim wb As Workbook
Dim ws1 As Worksheet, ws2 As Worksheet
Dim sr As Range

Set wb = ActiveWorkbook
Set ws1 = wb.Worksheets("Source Data")
Set ws2 = wb.Worksheets("Index File")
Set sr = ws1.Range("A2:H13")

For Each Row In sr.Cells
    Set LastCell = ws2.Cells(ws2.Rows.Count, "A").End(xlUp).Offset(1)
    LastCell.Value = "Begin Doc"
    LastCell.Offset(1, 0).Value = "Account Number: " & Row.Offset(0, 0).Value
    LastCell.Offset(2, 0).Value = "Account Type: " & Row.Offset(0, 1).Value
    LastCell.Offset(3, 0).Value = "Date: " & Row.Offset(0, 2).Value
    LastCell.Offset(4, 0).Value = "Doc Type: " & Row.Offset(0, 3).Value
    LastCell.Offset(5, 0).Value = "File Path: " & Row.Offset(0, 4).Value
    LastCell.Offset(6, 0).Value = "Institution: " & Row.Offset(0, 5).Value
    LastCell.Offset(7, 0).Value = "Name: " & Row.Offset(0, 6).Value
    LastCell.Offset(8, 0).Value = "TIN: " & Row.Offset(0, 7).Value
    LastCell.Offset(9, 0).Value = "End Doc"
Next Row

End Sub

以下是两个输出示例。左侧成功,右侧不成功:

Begin Doc                  |Begin Doc
Account Number: 123456     |Account Number: Checking
Account Type: Checking     |Account Type:01/01/2001
Date: 01/01/2001           |Date: Statement
Doc Type: Statement        |Doc Type: 123456.pdf
File Path: 123456.pdf      |File Path: 123
Institution: 123           |Institution: Jane Doe
Name: Jane Doe             |Name: 123-45-6789
TIN: 123-45-6789           |TIN:
End Doc                    |End Doc

注意单线向上移动。为了解决这个问题,我将循环更改为For Each Row In sr.Rows,但收到了Type 13 Mismatch错误。

我在将其扩展为包含更多行之前,从工作电子表格中复制了此代码。它几乎与工作代码相同。我做错了什么?

1 个答案:

答案 0 :(得分:1)

当我在校对我的帖子时,答案就在我身上。我不知道我是如何错过这个小错误或者在我的头脑中“点击”以识别它,但我回答了我自己的问题。如果其他人遇到类似的问题,我仍然觉得有价值。

代码查看每行中所有八个单元格的原因是因为我告诉它。在为源范围设置变量时,我错误地认为我需要包含所有数据:

Set sr = ws1.Range("A2:H13")

这是不正确的。我只需要第一列,代码将使用Offset命令对其余单元格进行排序。工作代码是:

 Set sr = ws1.Range("A2:A13")