我一直试图寻找答案,到目前为止我没有运气。
我正在寻找的解决方案是关于两个工作簿,并能够将源工作簿中的一行(它有1000行)复制到另一本书(任何时候只包含一行,不包括列标题)。
另一个问题是,下次运行宏时,我需要查看源工作簿中的下一行,例如
首先将第2行(作为列标题在第1行中)复制到另一本书的第2行 第二次运行将第3行复制到另一本书的第2行(因为阅读本书的程序仅在第2行中查找)。
所以我假设代码中需要一个计数器?
如果有任何建议,我们将非常感激。
答案 0 :(得分:1)
您将需要一个宏来复制数据,因为您要进行宏运行(每次运行宏时运行一行),您需要将上次复制的行的值存储在宏外部的某处。我们称之为LastRowCopiedOver
您可以将其存储在以下几个位置之一:
每次成功运行宏时,您都会更新LastRowCopiedOver的值,以便您知道下次要选择的行。
当您到达书的末尾时,您可以显示一个带有是/否问题的消息框,以重置回第2行。
答案 1 :(得分:0)
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”。将其替换为您的目的地工作表。
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编辑器并按标准工具栏或运行菜单中的重置按钮(方框)将计数器重置为零。
如果将计数器保存在某个受保护/隐藏的单元格或工作表中,则重置它将是PITA。
答案 2 :(得分:0)
感谢您的参与,在阅读上述解决方案后,我花了一些时间在解决方案上。 我最终创建了一个单独的excel文件,然后我使用一些VBA脚本创建一个计数器,然后将一行从大型excel源文件复制到新文件,因此它只包含一行数据。
我现在修改了我的QAWP脚本来运行这个excel宏,它现在使用新的单行电子表格在脚本中设置数据。
这似乎到目前为止工作,这意味着我可以与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