【发布时间】:2023-03-13 02:45:01
【问题描述】:
我需要一个宏来收集来自 3 个不同工作簿的信息并将其合并到第 4 个工作簿的一个选项卡上。
对于每个文件,列数相同,但行数不同。我需要做的宏是从 3 个源文件中的第一个中获取数据 + 列标题并将它们粘贴到目标文件中。然后,对于每个后续源文件,我需要宏仅粘贴从紧随其后的行开始的数据(无列标题)。
另外,目标文件与源文件位于不同的文件夹中。我将来会添加新文件的另一件事是源文件的数量可能会更多。所以下面只是一些名字的例子,供人们帮助我编写代码,之后我可以进去修改细节。
以下是详细信息:
1) 每个源文件都有我需要在 A:I 列中复制的数据。 2) 在每个源文件中,列标题在第 1 行,数据从第 2 行开始。 3) 在每个源文件中,我需要复制的数据位于“子文件_NCANDS”选项卡中。 4) 3个源文件所在的文件夹标题为“Testing Macro” 5) 在目标文件中,数据将被复制并粘贴到“子文件_NCANDS”选项卡中。 6) 目标文件标题为“TA Call Notes_Compiled_TEST.xls”
这是我目前想出的代码:
Sub TA_Call_Notes_Compiled()
' ---------------------------------------------------------------------------------------------
Dim i As Long, lCurrRow As Long, lRow As Long, n As Long
Dim wb As Workbook, ans As VbMsgBoxResult
For i = 1 To 3 Step 1
' -----------------------------------------------------------------------------------------
' Open up Source Workbook
' -----------------------------------------------------------------------------------------
On Error Resume Next
Set wb = Workbooks.Open(ThisWorkbook.Path & "N:\2012-2015 contract\State Data Submission_Validation_Communication\Technical Assistance\TA Calls 2018\Testing Macro" & i & ".xlsx")
If Not Err.Number = 0 Then
Err.Clear
' ---------------------------------------------------------------------------------------
' Source Workbook was not found using SourceX.xls format, try Source X.xls format
' ---------------------------------------------------------------------------------------
Set wb = Workbooks.Open(ThisWorkbook.Path & "N:\2012-2015 contract\State Data Submission_Validation_Communication\Technical Assistance\TA Calls 2018\Testing Macro" & i & ".xls")
If Not Err.Number = 0 Then
Err.Clear
' -------------------------------------------------------------------------------------
' No source workbook found, advise user.
' -------------------------------------------------------------------------------------
ans = MsgBox("Could not find Source " & i & " Workbook." & vbNewLine & "Do you wis" & _
"h to continue?", vbInformation + vbYesNo, "Error")
If ans = vbNo Then Exit Sub
GoTo NextI
End If
End If
' -----------------------------------------------------------------------------------------
' Source book was found, data to use is on Data Output.
' -----------------------------------------------------------------------------------------
With wb.Sheets("Child File_NCANDS")
If Not Err.Number = 0 Then
Err.Clear
' -------------------------------------------------------------------------------------
' No Data Output tab found, advise user.
' -------------------------------------------------------------------------------------
ans = MsgBox("Could not find Source " & i & " Workbook's 'Data Output' tab." & _
vbNewLine & "Do you wish to continue?", vbInformation + vbYesNo, "Error")
If ans = vbNo Then
wb.Close False
Exit Sub
End If
GoTo NextI
End If
' ---------------------------------------------------------------------------------------
' Ensure we add headers.
' ---------------------------------------------------------------------------------------
If i = 1 Then
lRow = 1
Else
lRow = 2
End If
' ---------------------------------------------------------------------------------------
' We are assuming the value in column A will be filled and there is no breaks until the
' end of our entries. If this is not the case additional code will be needed to
' determine the end of our entries.
' ---------------------------------------------------------------------------------------
Do Until .Range("A:I" & lRow).Value = vbNullString
lCurrRow = lCurrRow + 1
For n = 0 To 3 Step 1
Sheets("Child File_NCANDS").Range("A:I" & lCurrRow).Offset(ColumnOffset:=n).Value = .Range("A:I" & lRow).Offset(ColumnOffset:=n).Value
Next n
lRow = lRow + 1
Loop
End With
NextI:
wb.Close False
Next i
Set wb = Nothing
End Sub
【问题讨论】:
-
为什么不让您的文件已经包含标题,这样您就不必为它编码?如果它们是恒定的,那么有一个宏来做这似乎是过度杀戮。这是一个手动步骤,只需执行一次
-
是的,我的源文件包含标题以及目标文件。我从我的代码中收到一个错误,说它找不到源文件
-
您愿意改用文件对话框吗?我发现那些更好
-
是的,如果它有效,我愿意使用它
标签: vba