2017-08-07 14 views
0

2つのExcelワークブックがあり、1つのシートと別のシートのセットを新しいワークブックとして保存する必要があります。今週は毎週やっているので、マクロ/ vbaとして保存したいと思います。複数のワークブックの複数のシートを1つのワークブックに統合する

私はこのコードをオンラインで見つけて編集しましたが、動作しません。

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

*すべての*開いているブック(宛先を除く)に「ストア1」という名前のワークシートがありますか?そうでなければ、次のワークブックでそのワークシートを見つけられず、失敗します。 – tigeravatar

+0

いいえ、それは1つのブックのみで、他のブックではありません - わかります、それはすべてのブックで同じシートを探しています! 1つのワークブックから別のワークブックを取得し、別のワークブックから別のワークシートを取得するには、どうすれば変更できますか? – jeangelj

+0

For wkbを実行してワークブックをループするのではなく、どのブックにどのシートがあるかを指定する必要があります。名前をあらかじめ知っていない場合は、For Eachループを継続して使用する必要がありますが、コピーするシートがワークブックに含まれていることを確認するためにチェックインしてください。シートが含まれている場合は、それをコピーします。それ以外の場合はスキップします – tigeravatar

答えて

2
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

関連する問題