2014-10-10 112 views
1

我想为excel 2013创建一个vba宏。这个vba宏必须可用于所有excel文件,我在互联网上进行搜索,并且发现我必须将代码放入Excel加载项中,所以我尝试为excel的事件开放做一个代码;代码如下:ActiveWorkbook Path VBA宏Excel 2013错误?

Private Sub Workbook_Open() 
If (ActiveWorkbook.Path = "C:\GED\TEMP") Then 
    MsgBox "Hello" 
End If 
End Sub 

的问题是,当我打开Excel文件,VBA不知道活动的工作簿,因为它会打开XLSTART文件第一,然后我当前的文件,所以我有以下错误:运行时间错误'91':对象变量或未设置块变量。所以任何想法请;我应该在开头检查工作簿的路径

回答

1

您需要应用程序级别的事件来捕获任何工作簿的打开。这种替换代码:

Option Explicit 
Private WithEvents app As Excel.Application 

Private Sub app_WorkbookOpen(ByVal Wb As Workbook) 
    If UCase$(Wb.Path) = "C:\GED\TEMP" Then MsgBox "Hello" 
End Sub 

Private Sub Workbook_Open() 
Set app = Application 
End Sub 
+0

非常感谢罗里,它完美 – 2014-10-10 11:30:21

+0

罗里请,如果我有其他事件likeWorkbook_BeforeClose(取消正如布尔),我该怎么办? – 2014-10-10 11:52:44

+0

使用'Private Sub app_WorkbookBeforeClose(ByVal Wb As Workbook,Cancel As Boolean)'。如果您在代码窗口顶部的左侧下拉菜单中选择“应用程序”,则右侧下拉菜单将显示所有可用事件,并选择一个将为您创建例程声明。 – Rory 2014-10-10 12:10:10