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) 

错误消息的错误:“脚本超出范围”

+0

在*每个*打开的工作簿(目的地除外)中是否有名为“Store 1”的工作表?否则,它将无法在下一个工作簿中查找该工作表并导致失败。 – tigeravatar

+0

不,它只在一个工作簿中,而不在另一个工作簿中 - 我知道,它在每个工作簿中都寻找相同的工作表!如何将其更改为仅从一个工作簿获取一个工作表,并从另一个工作簿获取另一个工作表? – jeangelj

+0

而不是为每个wkb循环遍历工作簿,您需要指定哪个工作簿具有哪个工作表。如果您事先不知道名称,则必须继续使用For Each循环,但请检查以确保工作簿包含您要复制的工作表。如果它包含工作表,请复制它,否则跳过 – tigeravatar

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