2014-10-10 121 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