Excel – macros将dynamic行号从一个工作簿复制到另一个工作簿

我试过寻找答案,到目前为止我没有运气。

我正在寻找的解决scheme是关于两个工作簿,并能够从源工作簿(它有1000行)复制一行到另一本书(只包含一行,在任何时候,不包括列标题)。

另一个问题是,下一次macros运行时,我需要查看源工作簿中的下一行,例如

第一次运行将行2(作为列标题在行1中)复制到另一本书的行2中。第二次运行将行3复制到另一本书的行2中(因为阅读本书的程序仅在第二行中看到)。

所以我假设代码中需要一个计数器?

如果有任何build议,将非常感激。

您将需要一个macros来复制数据,而且由于您正在进行macros运行(每次运行macros时都有一行),因此您需要存储上次在macros外部复制的行的值。 我们称之为LastRowCopiedOver

你可以把它存储在几个地方之一:

  • 在同一工作簿中隐藏和保护的工作表
  • 现有工作簿中的受保护的单元格

每次macros成功运行,您都将更新LastRowCopiedOver的值,以便您知道下一次要select的行。

当您到达书的末尾时,您可以显示带有是/否问题的消息框以重置回第2行。

一个Static Function将做的伎俩。

 Static Function RowCounter() As Long Dim i ' Value of locally declared variable is preserved between calls. i = i + 1 RowCounter = i End Function 

每次你从你的主程序调用它, i会增加1.由于RowCounter是静态的,它会记住i的值在调用之间。

运行下面的子几次,并观察MsgBox增量。 当前行将被复制到“Sheet2”。 将其replace为您的目标工作表。

 Sub main() Dim iRow As Long Do While iRow < 2 ' To skip headers row 1... ' Get next row number. iRow = RowCounter Loop MsgBox iRow ' To show that each time main is called, iRow will be incremented by 1. ' Copy and paste that row... Rows(iRow).Copy Destination:=Worksheets("Sheet2").Rows(2) End Sub 

您可以通过进入VBA编辑器并按下标准工具栏或运行菜单中的重置button(正方形)将计数器重置为零。

如果您将计数器保存在某个受保护/隐藏的单元格或工作表中,则将其重置为PITA。

感谢您的意见,在阅读上面的解决scheme后,我花了一点时间解决这个问题。 我最终创build了一个单独的excel文件,然后我使用了一些VBA脚本来创build一个计数器,然后从一个大的excel源文件中复制一行到新文件,所以它只包含一行数据。

我现在修改了我的QAWP脚本来运行这个excelmacros,它现在使用新的单行电子表格在脚本中设置数据。

这似乎工作到目前为止,这意味着我可以创build新的testing数据与QAWP使用的数据表分开。

我已经发布了下面的excel VBA脚本以供参考:

 Sub Copy_Next_Record() Application.Workbooks.Open _ "C:\Documents and Settings\user\My Documents\Personal_Data.xls" Dim RowCount As Range Set RowCount = _ Workbooks("Full_Personal_Data.xls").Worksheets("Count").Range("A1") Workbooks("Full_Personal_Data.xls").Worksheets("Data").Activate Rows(RowCount).Copy _ Destination:=Workbooks("Personal_Data.xls").Worksheets("Sheet1").Rows(2) RowCount.Value = RowCount.Value + 1 Workbooks("Personal_Data.xls").Close True Workbooks("Full_Personal_Data.xls").Close True End Sub