Sub Макрос1()
Dim iOpen As Boolean, iFileName$
iOpen = Application.Dialogs(xlDialogOpen).Show
If iOpen = True Then
iFileName = ActiveWorkbook.Name
MsgBox "Вы открыли : " & iFileName, , ""
Else
MsgBox "Вы не выбрали рабочую книгу!", , ""
End If
End Sub
Событие открытия произвольной книги
Не могу отследить событие открытия книги.
Общая задача следующая.
1) Запускается макрос в изначально неизвестной книге А.
2) По ходу работы открывается диалог открытия, и через него открывается некоторая книга Б.
3) Необходимо перехватить имя открываемого документа Б, либо указатель на него. И далее, продолжить работу с Б и А.
Я сделал следующее:
1) Исполняемый код поместил в модули PERSONAL.XLS, чтобы запускать макрос из любой книги (А).
2) Перехват имени (попытался через ActiveWorkbook.Name) поместил в Workbook_open в "Эта книга" в PERSONAL.XLS. [COLOR="Red"]СОБЫТИЕ НЕ СРАБАТЫВАЕТ!!![/COLOR] Когда поместил в Workbook_open некоторой конкретной книги, которую через диалог и открыл, то событие сработало (хотя ActiveWorkbook результата не дал :) ).
Как быть? Какие рекомендации можете дать?
Заранее благодарен!
Версия: Excel 2003.
Код:
Ну и, соответственно, работайте потом с переменной iFileName
Вот демонстрационный пример ([color=blue]вся работа выполняется в книге PERSONAL.XLS[/color]):
1. Создайте новый модуль класса (пусть его имя - MyClass).
2. В этом модуле разместите такой код:
Код:
Public WithEvents App As Application
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
Dim strTemp As String
strTemp = Wb.Name
If StrComp(strTemp, ThisWorkbook.Name, vbTextCompare) <> 0 Then
MsgBox strTemp
End If
End Sub
Private Sub App_WorkbookOpen(ByVal Wb As Workbook)
Dim strTemp As String
strTemp = Wb.Name
If StrComp(strTemp, ThisWorkbook.Name, vbTextCompare) <> 0 Then
MsgBox strTemp
End If
End Sub
3. В модуле ЭтаКнига разместите такой код:
Код:
Dim objClass As New MyClass
Private Sub Workbook_Open()
Set objClass.App = Application
End Sub
Private Sub Workbook_Open()
Set objClass.App = Application
End Sub
или в любом обычном модуле такой ([color=blue]используйте только один вариант![/color]):
Код:
Dim objClass As New MyClass
Sub Auto_Open()
Set objClass.App = Application
End Sub
Sub Auto_Open()
Set objClass.App = Application
End Sub
4. Сохраните внесённые изменения и пробуйте всё это в работе.
P/S
Даже если для решения текущей задачи Вам вполне достаточно того, что уже предложил pavel55, то может быть в дальнейшем понадобится и приведённая мной информация. :)
Dmitrii, я думаю, ваш код понадобится многим )
Спасибо! Многое подчерпнул для себя!
Если честно, еще не испробовал. Но смысл написанного понятен :)