【问题标题】:VBA - Calling from another workbookVBA - 从另一个工作簿调用
【发布时间】:2026-02-09 12:45:01
【问题描述】:

尝试根据另一个工作簿工作表中的数据删除工作表 - 通过比较和访问另一个工作簿工作表中的数据,但它不起作用。如果工作表在同一个工作簿中,我可以做到这一点,但是我不想每次都导入工作表。

到目前为止的代码,我的问题是从另一个工作簿表调用。

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

提前致谢

【问题讨论】:

  • 您愿意删除哪些工作簿表?

标签: vba excel macros


【解决方案1】:

也许你追求的是这样的:

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

【讨论】:

  • 所以基本上我想将当前工作簿(1)工作表与另一个工作簿(2)工作表数据交叉引用,如果标题名称出现在工作簿(2)列(A:A)中,然后,如果名称出现/匹配工作簿(2)数据列(A:A),它将搜索工作簿(1)工作表并删除工作表。谢谢。
  • 在我看来,您只需要获取我的代码并将Workbooks("WorkbookWithSheetsToDelete.xlsx") 替换为Workbooks(1) 并将Workbooks("name.xlsx") 替换为Workbooks(2)。因此假设 1) 工作簿必须按时间顺序以正确的顺序打开,因为Workbooks(1) 指的是第一个打开的工作簿,Workbooks(2) 指的是当前 Excel 会话中打开的第二个工作簿 2) @987654328在“A”列中有工作表名称的@工作表以“allnames”命名(否则将其更改为实际名称)。告诉我