2016-10-20 17 views
0

別のブックからのデータに基づいてシートを削除しようとしています。シートが同じワークブックに入っていれば、私はそれを行うことができましたが、毎回ワークシートをインポートする必要はありません。VBA - 別のブックからの呼び出し

コードこれまでのところ、私の問題は別のワークブックシートから呼び出されています。シートは削除して喜んでいるワークブック

Option Explicit 

Sub delete() 
    Dim toDeleteSheetsWb As Workbook 
    Dim Cell As Range 

    Set toDeleteSheetsWb = Workbooks("WorkbookWithSheetsToDelete.xlsx") '<-- set the workbook whose sheets will be deleted (change "WorkbookWithSheetsToDelete.xlsx" to its actual name) 
    With Workbooks("name.xlsx").Worksheets("allnames") '<-- reference the worksheet from which to read worksheets names to be deleted in "WorkbookWithSheetsToDelete.xlsx" workbook 
     Application.DisplayAlerts = False 
     For Each Cell In .Range("A1", .Cells(.Rows.Count, "A").End(xlUp)) 
      toDeleteSheetsWb.Sheets(Cell.Value).delete 
     Next Cell 
     Application.DisplayAlerts = True 
    End With 
End Sub 
+0

: – user3598756

答えて

0

事前

sub delete() 
    Dim wb As Workbook 
    Dim wks As Worksheet 
    Dim MyRange As Range 
    Dim Cell As Range 
    Set wb = Workbooks("name.xlsx") 
    Set wks = wb.Worksheets("allnames") 
    With wks 
     Set MyRange = wks.Range("A1", .Cells(.Rows.Count, "A").End(xlUp)) 
    End With 
    On Error Resume Next 
    Application.DisplayAlerts = False 
    For Each Cell In MyRange 
     Sheets(Cell.Value).Delete 
    Next Cell 
    Application.DisplayAlerts = True 
    On Error GoTo 0 
End Sub 

おかげで多分あなたはこのような何か後にしていますか?

+0

本質的には、現在のワークブック(1)シートと別のワークブック(2)シートデータを参照したい場合は、ワークブック(2)の列(A:A)にタイトルの名前が表示されると、 )シートを削除し、名前がワークブック(2)のデータ列(A:A)に表示されていればシートを削除します。 ありがとうございます。 – Joe

+0

私のコードは、ワークブック( "WorkbookWithSheetsToDelete.xlsx")を 'Workbooks(1)'と 'Workbooks(" name.xlsx ")'を 'Workbooks(2)'に置き換えればいいと思います。したがって、1)ワークブックは最初の開かれたワークブックを参照し、「ワークブック(2)」は現在のエクセルセッションで2番目に開いたワークブックを参照するため、正しい順序でワークブックが開かれていなければなりません2) 2) 'A列にシート名があるシートは、「allnames」の後に名前が付けられます(そうでなければ実際のものに変更されます)。お知らせ下さい – user3598756

関連する問題