2017-05-06 177 views
1

我有两个工作簿,一个用于输入数据(工作簿A),另一个用于计算(工作簿B)。Excel宏Workbook_BeforeClose特定工作簿

工作簿时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 

的问题是,如果有人退出的Excel工作簿时B是开放的,但工作簿是在前台,你收到运行时错误'1004'。

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

非常感谢您的帮助。

回答

3

您没有提供任何指示该范围的工作表。也许,

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可以选择一个命名的单元格。我已经调整了上面的代码来使用一个worbook范围定义的名称,然后Application.Goto该单元格。

+0

这给我错误“选择范围类失败的方法”。 –

+0

是的,您需要激活工作表,然后才能在该工作表上选择单元格。我已经调整了上面的代码,但是最好清除值并使用Workbook_Open选择B2。 – Jeeped

+0

这样做,谢谢。唯一的问题是,没有人会在完成后退出Excel,但我只是打电话给.Parent.Close并解决了这个问题。非常感谢你的帮助。 –

相关问题