2014-10-10 4 views
1

Я хочу создать макрос vba для excel 2013. этот макрос vba должен быть доступен для всех файлов excel, я делаю поиск в Интернете, и я обнаружил, что должен поместить код в надстройку Excel, поэтому я пытаюсь сделать код для открытия события excel; код выглядит следующим образом:Ошибка с ActiveWorkbook Путь VBA macro Excel 2013?

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

проблема заключается в том, что когда я открываю первенствую файл, VBA не знает активную рабочую книгу, потому что он открывает файл в Xlstart первый тогда мой текущий файл, так что у меня есть следующее сообщение об ошибке: Run -time error '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

большое спасибо Рори, это работает отлично –

+0

Рори, пожалуйста, если у меня есть другое событие likeWorkbook_BeforeClose (Отменить As Boolean), что я должен делать? –

+0

Используйте 'Private Sub app_WorkbookBeforeClose (ByVal Wb As Workbook, Cancel As Boolean)'. Если вы выберете 'app' в раскрывающемся списке левой руки в верхней части окна кода, выпадающее меню правой руки покажет вам все доступные события, и, выбрав один, вы создадите декларацию подпрограммы для вас. – Rory