关闭工作簿时删除指定外可见工作表的VBA代码报‘Object required’错误求助
解决VBA关闭工作簿时删除工作表的"Object required"错误
嘿,我来帮你搞定这个问题!你碰到的「Object required」错误其实是个很容易踩的小坑,咱们直接说问题根源和解决办法:
错误原因
你代码里的For Each ws In Workbook是核心问题——Workbook是VBA中的类类型,不是具体的工作簿实例对象。VBA根本不知道你要遍历哪个打开的工作簿,自然会抛出「找不到对象」的错误。
修正后的代码
咱们把遍历对象改成具体的工作簿(比如包含当前代码的ThisWorkbook),同时可以加上关闭弹窗提示的优化,避免每次删表都弹确认框:
Private Sub workbook_BeforeClose(cancel As Boolean) Dim ws As Worksheet ' 关闭删除工作表的确认弹窗 Application.DisplayAlerts = False ' 遍历当前代码所在工作簿的所有工作表 For Each ws In ThisWorkbook.Worksheets If ws.Visible = xlSheetVisible Then If ws.Name <> "Choose BU" Then ws.Delete End If End If Next ws ' 恢复弹窗提示(好习惯) Application.DisplayAlerts = True End Sub
关键细节解释
ThisWorkbook.WorksheetsvsWorkbook:ThisWorkbook指向的是包含这段VBA代码的工作簿,用它能精准操作目标文件,不会误触其他打开的工作簿;而Workbook只是类名,不是可操作的对象。- 关闭提示弹窗:
Application.DisplayAlerts = False会自动确认删除操作,让整个过程更流畅,操作完成后记得改回True,不影响后续的Excel操作。 - 额外提醒:要确保你的工作簿里确实存在名为「Choose BU」的可见工作表,不然代码会把所有可见表都删掉,这可不是你想要的结果哦!
内容的提问来源于stack exchange,提问作者Gisse
相关产品推荐
相关产品推荐

