【问题标题】:Excel Macro Workbook_BeforeClose Specific WorkbookExcel 宏工作簿_BeforeClose 特定工作簿
【发布时间】:2017-05-06 18:47:31
【问题描述】:

我有两个工作簿,一个用于在(工作簿 A)中输入数据,另一个用于计算(工作簿 B)。

当工作簿 B 关闭时,将运行以下代码,将其重置...

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Range("B2:B4,B6:B8,B10:B12,B14:B16,B18:B20,B22:B24,B26:B28,B30:B32").ClearContents
    Range("B2").Select
    ActiveWorkbook.Save
End Sub

问题是,如果有人在工作簿 B 打开时退出 Excel,但工作簿 A 在前台,您会收到运行时错误“1004”。

如何更改宏以在工作簿 B 上运行上述代码,而不管其他工作簿是打开的还是在前台?

提前感谢您的帮助。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    您没有提供范围在哪个工作表上的指示。也许,

    Option Explicit
    
    Private Sub Workbook_BeforeClose(Cancel As Boolean)
        Cancel = False
        With ThisWorkbook.Worksheets("sheet1")
            .Range("B2:B4,B6:B8,B10:B12,B14:B16,B18:B20,B22:B24,B26:B28,B30:B32").ClearContents
            .Range("B2").Name = "openHere"
            Application.Goto Reference:="openHere"
            .Parent.Save
        End With
    End Sub
    

    您必须激活工作表才能在其上选择一个单元格,但 Application.Goto 可以选择一个命名单元格。我已经调整了上面的代码以使用工作簿范围定义的名称,然后 Application.Goto 那个单元格。

    【讨论】:

    • 这给了我错误“范围类的选择方法失败”。
    • 是的,您需要先激活工作表,然后才能选择该工作表上的单元格。我已经调整了上面的代码,但您最好清除这些值并使用 Workbook_Open 选择 B2。
    • 成功了,谢谢。唯一的问题是它在完成后不再退出 Excel,但我只是调用 .Parent.Close 并解决了这个问题。非常感谢您的帮助。
    • 我已将 .Select 代码修改为上面的 Application.Goto。这可能是确保工作簿在 Sheet1!B2 上打开的更可靠的方法。
    猜你喜欢
    • 1970-01-01
    • 2014-08-01
    • 2018-01-25
    • 1970-01-01
    • 1970-01-01
    • 2015-05-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多