excel vba将多个工作簿中的多个工作表合并到一个工作簿中
问题描述:
我有两个excel工作簿,我需要从一个工作表中取一组工作表和另一个工作表组成另一个工作表并将其另存为新工作簿。由于我每周都会这样做,所以我想把它保存为一个宏/ vba。excel vba将多个工作簿中的多个工作表合并到一个工作簿中
我在网上发现了这段代码并对其进行了编辑,但它不起作用。
Sub CopySheets()
Dim wkb As Workbook
Dim sWksName As String
sWksName = "Store 1"
For Each wkb In Workbooks
If wkb.Name <> ThisWorkbook.Name Then
wkb.Worksheets(sWksName).Copy _
Before:=ThisWorkbook.Sheets(1)
End If
Next
Set wkb = Nothing
sWksName = "Store 3"
For Each wkb In Workbooks
If wkb.Name <> ThisWorkbook.Name Then
wkb.Worksheets(sWksName).Copy _
Before:=ThisWorkbook.Sheets(1)
End If
Next
Set wkb = Nothing
sWksName = "Store 30"
For Each wkb In Workbooks
If wkb.Name <> ThisWorkbook.Name Then
wkb.Worksheets(sWksName).Copy _
Before:=ThisWorkbook.Sheets(1)
End If
Next
Set wkb = Nothing
sWksName = "Store 33"
For Each wkb In Workbooks
If wkb.Name <> ThisWorkbook.Name Then
wkb.Worksheets(sWksName).Copy _
Before:=ThisWorkbook.Sheets(1)
End If
Next
Set wkb = Nothing
End Sub
我必须打开两个工作簿,这是没有问题的。纸张“商店1”被复制精细,然后它停止,当我点击调试,它告诉我,有一个与该行
wkb.Worksheets(sWksName).Copy _
Before:=ThisWorkbook.Sheets(1)
错误消息的错误:“脚本超出范围”
答
Sub CopySheets()
Dim wb As Workbook
Dim ws As Worksheet
Dim sWsNames As String
sWsNames = "Store 1,Store 3,Store 30,Store 33"
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then
For Each ws In wb.Sheets
If InStr(1, "," & sWsNames & ",", "," & ws.Name & ",", vbTextCompare) > 0 Then
ws.Copy Before:=ThisWorkbook.Sheets(1)
End If
Next ws
End If
Next
End Sub
+0
谢谢你 - 它的工作! – jeangelj
在*每个*打开的工作簿(目的地除外)中是否有名为“Store 1”的工作表?否则,它将无法在下一个工作簿中查找该工作表并导致失败。 – tigeravatar
不,它只在一个工作簿中,而不在另一个工作簿中 - 我知道,它在每个工作簿中都寻找相同的工作表!如何将其更改为仅从一个工作簿获取一个工作表,并从另一个工作簿获取另一个工作表? – jeangelj
而不是为每个wkb循环遍历工作簿,您需要指定哪个工作簿具有哪个工作表。如果您事先不知道名称,则必须继续使用For Each循环,但请检查以确保工作簿包含您要复制的工作表。如果它包含工作表,请复制它,否则跳过 – tigeravatar