К созданному и созданному объекту можно получить доступ с помощью функции GetObject. В качестве параметров указывается строка, содержащая полный путь и имя файла, содержащего объект, и строка, содержащая указание класса объекта:
Set objXLSheet = GetObject(strSavedReport, “Excel.Sheet”)
где strSavedReport – строка, содержащая путь и имя файла.
Приложение объекта можно сделать видимым для работы с ним:
objXLSheet.Application.Visible = True
В приведенной ниже процедуре открывается предварительно созданный рабочий лист, для работы с ним делается видимым приложение и сам лист (его окно), после чего на экран в окне «родительского» приложения (например, Word), из которого запускается на выполнение данная процедура, выдается сообщение. Пользователь может переключиться через панель задач в окно родительского приложения или в Excel и отредактировать лист. В родительском приложении, из которого запускается данный макрос, пользователь должен щелкнуть кнопку OK в диалоговом окне для продолжения работы. Если пользователь сам не завершил работу Excel, после соответствующей проверки в процедуре приложение Excel завершается без сохранения изменений, внесенных в данные (окно предупреждения на экран не выводится).
Sub GetObj()
Dim strSavedReport As String
strSavedReport = "C:\Db\OfficeSolutionsRpt.xls"
Set objXLSheet = GetObject(strSavedReport, _
"Excel.Sheet")
objXLSheet.Application.Visible = True
objXLSheet.Parent.Windows(1).Visible = True
MsgBox "Был открыт лист Excel"
If Tasks.Exists(Name:="Microsoft Excel") Then
Set myobject = GetObject("", "Excel.Application")
MsgBox "Закрываем Excel без сохранения"
objXLSheet.Application.DisplayAlerts = False
objXLSheet.Application.Quit
End If
End Sub
Для получения ссылки на существующий экземпляр объекта используется функция GetObject (Excel с помощью этой функции позволяет открывать файлы, но все остальные продукты Office этого не могут).
Для позднего связывания используются операторы, записанные по следующим правилам:
где класс соответствует указанному при вызове функции типу объекта.
При использовании данной функции для открытия файла аргумент класса является необязательным. Но если функция используется для открытия объектов из файлов Excel, необходимо в качестве второго аргумента указать “Excel.Sheet” или“Excel.Chart” (а “Excel.Application”в этом случае использовать нельзя). Для открытия и отображения рабочей книги ее имя (но не весь путь) заключается в квадратные скобки.
SubCreateWorkBook() If Dir(“C:\DB\My_Book.xls”) <> “” Then Kill “C:\DB\My_Book.xls” End If SetObjExcel= CreateObject(“Excel.Application”) ObjExcel.Workbooks.Add ObjExcel.ActiveCell.Value = “Вписанные данные” ObjExcel.Workbooks(1).SaveAs “C:\DB\My_Book.xls” ObjExcel.Quit SetObjExcel= Nothing End Sub
SubGetWorkBook() SetObjExcel= GetObject(“C:\DB\[My_Book.xls]”, _ “Excel.Sheet”) ObjExcel.Application.Visible = True MsgBox Prompt:=“Нажмите кнопку для закрытия Excel”, _ Buttons := vbInformation ObjExcel.Application.Quit SetObjExcel= Nothing End Sub
Эти процедуры следует запускать последовательно. Первая процедура создает рабочую книгу Excel. Вторая – открывает ее.
Если в программе есть объект, ссылающийся на отдельный рабочий лист или лист диаграммы Excel, то доступ к другим рабочим листам книги можно получить с помощью свойства Parent данного объекта.
Функция GetObject запускает приложение, указанное с помощью второго аргумента, и активизирует объект, находящийся в указанном файле. Если первый аргумент является пустой строкой (""), GetObject возвращает новый экземпляр объекта указанного типа. Если этот аргумент опущен, GetObject возвращает текущий активный объект указанного типа. Если ни одного объекта указанного типа не существует, возникает ошибка. Следовательно, данную функцию можно использовать, чтобы определить, открыт ли требуемый объект:
Sub GetWordObj()
On Error GoTo OLE_Error
Dim blnIsAppOpen As Boolean
Dim objWord As Object
Set objWord = GetObject(, "Word.Application")
blnIsAppOpen = True
OLE_continue:
If Not blnIsAppOpen Then
Set objWord = CreateObject("Word.Application")
End If
objWord.Application.Visible = True
objWord.Documents.Add
MsgBox Prompt:="Нажмите кнопку для закрытия Word", _