Getobject vba excel примеры

Access для Microsoft 365 Access 2021 Access 2019 Access 2016 Access 2013 Access 2010 Access 2007 Еще…Меньше

Примечание: Функция, метод, объект или свойство, описанные в данном разделе, отключаются, если служба обработки выражений Microsoft Jet выполняется в режиме песочницы, который не позволяет рассчитывать потенциально небезопасные выражения. Для получения дополнительных сведений выполните в справке поиск по словам «режим песочницы».

Возвращает ссылку на объект, предоставляемый компонентом ActiveX.

Синтаксис

GetObject([имя_пути ] [, класс ] )

Функция GetObject имеет следующие аргументы:

Аргумент

Описание


имя_пути

Необязательный аргумент. Variant (String). Полный путь к файлу, содержащему объект, который требуется получить. Если аргумент имя_пути пропущен, класс является обязательным.


класс

Необязательный аргумент. Variant (String). Строка, представляющая класс объекта.

Аргумент классаргумент использует синтаксис имя_приложения.тип_объекта и содержит следующие части:

Элемент

Описание

имя_приложения

Обязательный аргумент. Variant (String). Имя приложения, предоставляющего объект.

тип_объекта

Обязательный аргумент. Variant (String). Тип или класс объекта, который требуется создать.

Замечания

Примечание: В примерах ниже показано, как использовать эту функцию в модуле Visual Basic для приложений (VBA). Чтобы получить дополнительные сведения о работе с VBA, выберите Справочник разработчика в раскрывающемся списке рядом с полем Поиск и введите одно или несколько слов в поле поиска.

Функция GetObject используется для доступа к объекту ActiveX файла и его назначению объекту объектная переменная. Чтобы назначить объекту, возвращаемом объектом GetObject, объекту, возвращаемом объектом, используйте утверждение Set. Например:

Dim CADObject As Object
Set CADObject = GetObject("C:CADSCHEMA.CAD")

При выполнении этого кода приложение, связанное с указанным именем_пути, запускается, а объект в указанном файле активируется.

Если имя_пути содержит пустую строку («»), GetObject возвращает новый экземпляр объекта указанного типа. Если аргумент имя_пути пропущен, функция GetObject возвращает текущий активный объект указанного типа. Если такой объект не существует, возникает ошибка.

Некоторые приложения разрешают активировать часть файла. Добавьте в конец имени файла восклицательный знак (!), а после него строку, указывающую часть файла, которую требуется активировать. Сведения о создании этой строки см. в документации приложения, в котором был создан объект.

Например, в графическом редакторе может быть несколько уровней для рисунка, сохраненного в файле. Вы можете использовать следующий код для активации уровня рисунка с названием SCHEMA.CAD:

Set LayerObject = GetObject("C:CADSCHEMA.CAD!Layer3")

Если класс объекта не был задан, автоматизация определяет запускаемое приложение и активируемый объект на основе предоставленного имени файла. Некоторые файлы, однако, могут поддерживать несколько классов объектов. Например, рисунок может поддерживать три различных типа объектов — объект Application, объект Drawing и объект Toolbar, —каждый из которых является частью одного и того же файла. Чтобы указать, какой объект в файле требуется активировать, используйте необязательный аргумент класс. Например:

Dim MyObject As Object
Set MyObject = GetObject("C:DRAWINGSSAMPLE.DRW", _
"FIGMENT.DRAWING")

В этом примере FIGMENT является названием графического редактора, а DRAWING — именем поддерживаемого им типа объекта.

Если объект активирован, он указывается в коде с помощью определенной вами объектной переменной. В предыдущем примере доступ к свойствам и методам нового объекта осуществлялся с помощью объектной переменной MyObject. Например:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:DRAWINGSSAMPLE.DRW"

Примечание:  Используйте функцию GetObject, когда существует текущий экземпляр объекта или требуется создать объект с помощью уже загруженного файла. Если текущего экземпляра нет и вам не требуется объект, созданный с помощью загруженного файла, используйте функцию CreateObject.

Если объект зарегистрировал себя как объект типа «единственный экземпляр», создается только один экземпляр этого объекта независимо от того, сколько раз выполнялась функция CreateObject. При случае с объектом с одним экземпляром GetObject всегда возвращает один и тот же экземпляр, если он вызывается с нулевой строкой («»), и вызывает ошибку, если аргумент путь опущен. Получить ссылку на занятие, созданное с помощью Visual Basic, с помощью GetObject нельзя.

Пример

В этом примере функция GetObject применяется для получения ссылки на определенный лист Microsoft Office Excel 2007 (MyXL). Она использует свойство Application листа, чтобы сделать видимым Excel, закрыть его и т. п. Используя два вызова API, процедура DetectExcel Sub осуществляет поиск Excel и, если он выполняется, вводит его в текущую таблицу объектов. Первый вызов функции GetObject приводит к возникновению ошибки, если Microsoft Excel не выполняется. В этом примере ошибка приводит к заданию для флага ExcelWasNotRunning значения True. Второй вызов GetObject задает открытие файла. Если Excel еще не выполняется, второй вызов запускает его и возвращает ссылку на лист, представленный указанным файлом (mytest.xls). Файл должен существовать в указанном расположении; в противном случае генерируется ошибка автоматизации Visual Basic. Далее пример кода делает видимым и Excel, и окно, содержащее указанный лист. Наконец, если Excel не был изначально запущен, в коде используется метод Quit объекта Application для закрытия Excel. Если приложение уже выполнялось, попытка закрыть его не предпринимается. Сама ссылка освобождается посредством присвоения ей значения Nothing.

' Declare necessary API routines:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
ByVal wParam as Long, _
ByVal lParam As Long) As Long
Sub GetExcel()
Dim MyXL As Object ' Variable to hold reference
' to Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Flag for final release.
' Test to see if there is a copy of Microsoft Excel already running.
On Error Resume Next ' Defer error trapping.
' GetObject function called without the first argument returns a
' reference to an instance of the application. If the application isn't
' running, an error occurs.
Set MyXL = GetObject(, "Excel.Application")
If Err.Number <> 0 Then ExcelWasNotRunning = True
Err.Clear ' Clear Err object in case error occurred.
' Check for Microsoft Excel. If Microsoft Excel is running,
' enter it into the Running Object table.
DetectExcel
' Set the object variable to reference the file you want to see.
Set MyXL = GetObject("c:vb4MYTEST.XLS")
' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True
Do manipulations of your file here.
' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
If ExcelWasNotRunning = True Then
MyXL.Application.Quit
End IF
Set MyXL = Nothing ' Release reference to the
' application and spreadsheet.
End Sub
Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
Const WM_USER = 1024
Dim hWnd As Long
' If Excel is running this API call returns its handle.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 means Excel not running.
Exit Sub
Else
' Excel is running so use the SendMessage API
' function to enter it in the Running Object Table.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub

Нужна дополнительная помощь?

GetObject([Pathname] [Class])

Возвращает ссылку на объект, обеспечиваемый компонентом ActiveX

Параметры
Функция содержит именованные аргументы


Pathname Необязательный аргумент-значение типа Variant(String). Полная спецификация пути и имя файла, содержащего отыскиваемый объект. В случае, если аргумент опущен, параметр Class является обязательным
Class Необязательный аргумент-значение типа Variant(String).Строка, отражающая класс объекта

Параметр Class имеет синтаксис appname.objecttype, в котором присутствуют следующие элементы:


Appname Обязательный. Значение типа Variant(String). Имя приложения, предоставляющего объект
ObjectType Обязательный. Значение типа Variant(String). Tип или класс создаваемого объекта

Примечания

Функция GetObject применяется для доступа в объекту ActiveX, находящемуся в файле, и для присваивания этого объекта объектной переменной. Для присваивания объекта, возвращенного функцией GetObject, объектной переменной используется оператор Set. Например:

Dim CADObject As Object
Set CADObject = GetObject("C:CADSCHEMA.CAD")

При исполнении данного кода производится запуск приложения, указанного параметром pathname, и активизация объекта в заданном файле.

Если значением параметра pathname является пустая строка («»), функция GetObject возвращает новый экземпляр объекта заданного типа. В случае, если параметр pathname опущен, функция GetObject возвращает активный в данный момент объект заданного типа. Если объекта указанного типа не существует, возникает ошибка.

Ряд приложений допускают активизацию части файла. Для этого нужно добавить после имени файла восклицательный знак (!) и поместить вслед за ним строку, задающую ту часть файла, которую требуется активизировать. Дополнительные сведения относительно составления такой строки смотрите в документации на то приложение, которое создает объект.

К примеру, в графическом приложении может присутствовать несколько уровней рисования, хранящихся в файле. Для активизации уровня под названием SCHEMA.CAD можно воспользоваться следующим кодом:

Set LayerObject = GetObject("C:CADSCHEMA.CAD!Layer3")

В тех случаях, когда не указан класс объекта (параметр class), автоматизация (Automation) находит приложение, которое нужно запустить, на основе заданного имени файла. Однако ряд файлов могут поддерживать несколько классов объектов. Например, приложение для рисования может поддерживать три различных типа объектов: объект Application, объект Drawing и объект Toolbar, которые являются частью одного файла. Для указания требуемого объекта нужно указать необязательный параметр class. Например:

Dim MyObject As Object
Set MyObject = GetObject("C:DRAWINGSSAMPLE.DRW", "FIGMENT.DRAWING")

В приведенном примере FIGMENT – это имя графического приложения, а DRAWING – один из поддерживаемых этим приложением типов объектов.

После активизации объекта, производится ссылка на него в коде с использованием определенной объектной переменной,. В предыдущем примере доступ к свойствам и методам нового объекта осуществляется с помощью объектной переменной MyObject. Например:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:DRAWINGSSAMPLE.DRW"

Замечание Функцию GetObject полезно использовать в тех случаях, когда уже имеется текущий экземпляр объекта, или при необходимости создать объект из уже загруженного файла. Если же текущий экземпляр объекта отсутствует и нежелательно запускать объект из загруженного файла, применяется функция CreateObject.

Если объект производит само регистрацию в качестве объекта с единственным экземпляром, то, независимо от числа обращений к функции CreateObject, будет создан только один экземпляр такого объекта. В случае наличия только одного экземпляра объекта, функция GetObject, при ее вызове с использованием синтаксиса с указанием пустой строки («»), всегда возвращает один и тот же экземпляр, а при отсутствии параметра pathname возникает ошибка. Функцию GetObject можно применять для получения ссылки на класс, созданный в Visual Basic.

Пример

'Пример использования функции GetObject
' В данном примере функция GetObject создает ссылку
' на конкретный лист (MyXL) в Microsoft Excel.
' Для того, чтобы сделать Microsoft Excel видимым,
'закрыть его и т. д., используется свойство 
' Application рабочего листа.
' С помощью двух вызовов API процедура 
' Sub DetectExcel ищет Microsoft Excel и,
' если он выполняется, вводит его в таблицу выполняемых
' объектов (Running Object Table).
' Первый вызов GetObject приводит к ошибке,
' если Microsoft Excel еще не запущен.
' В этой программе ошибка приводит к установке значения True для флага ExcelWasNotRunning.
' Второй вызов GetObject указывает открываемый
' файл. Если Microsoft Excel не был запущен, то в
' результате второго вызова функции это приложение
' запускается, при этом возвращается ссылка на лист,
' соответствующий указанному файлу. Файл mytest.xls
' должен существовать в указанном каталоге; в противном ' случае возникает ошибка Visual Basic «Automation error»
' (Ошибка автоматизации). Далее в программе делаются
' видимыми окно Microsoft Excel и окно, содержащее
' указанный лист. И наконец, если Microsoft Excel
' не выполнялся при запуске этой программы,
' метод Quit объекта Application
' закрывает Microsoft Excel. Если это приложение
' выполнялось до запуска данной программы, попытка
' закрыть его не предпринимается. Ссылка на лист
' освобождается путем установки ее значения в Nothing
' Описываем необходимые процедуры API:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
 ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
 ByVal wParam as Long, _
 ByVal lParam As Long) As Long

Sub GetExcel()
 Dim MyXL As Object  ' Переменная для сохранения
 ' ссылки на Microsoft Excel
 Dim ExcelWasNotRunning As Boolean  ' Флаг для окончательного освобождения.

' Проверка, выполняется ли Microsoft Excel
 On Error Resume Next ' Отложенный перехват ошибок.
' Функция GetObject, вызванная без указания первого параметра, 
' возвращает ссылку на экземпляр приложения. Если приложение
' не запущено, возвращается ошибка
 Set MyXL = Getobject(, "Excel.Application")
 If Err.Number <> 0 Then ExcelWasNotRunning = True
 Err.Clear ' Очищаем объект Err на случай ошибки.

' Проверка Microsoft Excel. Если Microsoft Excel выполняется,
' он вводится в таблицу выполняемых объектов (Running Object table)
 DetectExcel

' Задаем в объектной переменной ссылку на открываемый файл
 Set MyXL = Getobject("c:vb4MYTEST.XLS")

' Делаем видимым Microsoft Excel с помощью его свойства Application. 
' Делаем видимым окно, содержащее файл, с помощью 
' коллекции Windows, задаваемой объектной ссылкой MyXL
 MyXL.Application.Visible = True
 MyXL.Parent.Windows(1).Visible = True
  Do manipulations of your file here.
 ' ...
' Если этот экземпляр Microsoft Excel не выполнялся при запуске данной
' программы, закрываем его с помощью метода Quit свойства Application. 
' Отметим, что при попытке выхода из Microsoft Excel
' появляется мерцание строки заголовка и отображается сообщение, запрашивающее вас
' о необходимости сохранения файлов
 If ExcelWasNotRunning = True Then 
 MyXL.Application.Quit
 End IF

 Set MyXL = Nothing ' Освобождаем ссылку на
 ' приложение и электронную таблицу
End Sub

Sub DetectExcel()
' Процедура находит выполняемый Excel и регистрирует его
 Const WM_USER = 1024
 Dim hWnd As Long
' Если Excel выполняется, этот вызов API возвращает его дескриптор
 hWnd = FindWindow("XLMAIN", 0)
 If hWnd = 0 Then  ' 0 означает, что Excel не выполняется
 Exit Sub
 Else 
 ' Excel выполняется, поэтому используйте
 функцию API SendMessage, чтобы ввести его в таблицу выполняемых объектов (Running Object Table)
 SendMessage hWnd, WM_USER + 18, 0, 0
 End If
End Sub

Категория
Функции работы с объектами

title keywords f1_keywords ms.prod ms.assetid ms.date ms.localizationpriority

GetObject function (Visual Basic for Applications)

vblr6.chm1010959

vblr6.chm1010959

office

6c313a4c-dac9-9115-95db-3fde52a5e888

12/12/2018

medium

Returns a reference to an object provided by an ActiveX component.

Syntax

GetObject([ pathname ], [ class ])

The GetObject function syntax has these named arguments:

Part Description
pathname Optional; Variant (String). The full path and name of the file containing the object to retrieve. If pathname is omitted, class is required.
class Optional; Variant (String). A string representing the class of the object.

The class argument uses the syntax appname.objecttype and has these parts:

Part Description
appname Required; Variant (String). The name of the application providing the object.
objecttype Required; Variant (String). The type or class of object to create.

Remarks

Use the GetObject function to access an ActiveX object from a file and assign the object to an object variable. Use the Set statement to assign the object returned by GetObject to the object variable. For example:

Dim CADObject As Object
Set CADObject = GetObject("C:CADSCHEMA.CAD")

When this code is executed, the application associated with the specified pathname is started, and the object in the specified file is activated.

If pathname is a zero-length string («»), GetObject returns a new object instance of the specified type. If the pathname argument is omitted, GetObject returns a currently active object of the specified type. If no object of the specified type exists, an error occurs.

Some applications allow you to activate part of a file. Add an exclamation point (!) to the end of the file name and follow it with a string that identifies the part of the file that you want to activate. For information about how to create this string, see the documentation for the application that created the object.

For example, in a drawing application you might have multiple layers to a drawing stored in a file. You could use the following code to activate a layer within a drawing called SCHEMA.CAD:

Set LayerObject = GetObject("C:CADSCHEMA.CAD!Layer3")

If you don’t specify the object’s class, automation determines the application to start and the object to activate, based on the file name you provide. Some files, however, may support more than one class of object. For example, a drawing might support three different types of objects: an Application object, a Drawing object, and a Toolbar object, all of which are part of the same file. To specify which object in a file you want to activate, use the optional class argument. For example:

Dim MyObject As Object
Set MyObject = GetObject("C:DRAWINGSSAMPLE.DRW", "FIGMENT.DRAWING")

In the example, FIGMENT is the name of a drawing application and DRAWING is one of the object types it supports.
After an object is activated, you reference it in code by using the object variable you defined. In the preceding example, you access properties and methods of the new object by using the object variable MyObject. For example:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:DRAWINGSSAMPLE.DRW"

[!NOTE]
Use the GetObject function when there is a current instance of the object or if you want to create the object with a file already loaded. If there is no current instance, and you don’t want the object started with a file loaded, use the CreateObject function.

If an object has registered itself as a single-instance object, only one instance of the object is created, no matter how many times CreateObject is executed. With a single-instance object, GetObject always returns the same instance when called with the zero-length string («») syntax, and it causes an error if the pathname argument is omitted. You can’t use GetObject to obtain a reference to a class created with Visual Basic.

Example

This example uses the GetObject function to get a reference to a specific Microsoft Excel worksheet (MyXL). It uses the worksheet’s Application property to make Microsoft Excel visible, to close it, and so on.

Using two API calls, the DetectExcel Sub procedure looks for Microsoft Excel, and if it is running, enters it in the Running Object Table.

The first call to GetObject causes an error if Microsoft Excel isn’t already running. In the example, the error causes the ExcelWasNotRunning flag to be set to True.

The second call to GetObject specifies a file to open. If Microsoft Excel isn’t already running, the second call starts it and returns a reference to the worksheet represented by the specified file, mytest.xls. The file must exist in the specified location; otherwise, the Visual Basic error Automation error is generated.

Next, the example code makes both Microsoft Excel and the window containing the specified worksheet visible. Finally, if there was no previous version of Microsoft Excel running, the code uses the Application object’s Quit method to close Microsoft Excel. If the application was already running, no attempt is made to close it. The reference itself is released by setting it to Nothing.

' Declare necessary API routines:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
                    ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
                    ByVal wParam as Long, _
                    ByVal lParam As Long) As Long

Sub GetExcel()
    Dim MyXL As Object    ' Variable to hold reference
                                ' to Microsoft Excel.
    Dim ExcelWasNotRunning As Boolean    ' Flag for final release.

' Test to see if there is a copy of Microsoft Excel already running.
    On Error Resume Next    ' Defer error trapping.
' Getobject function called without the first argument returns a 
' reference to an instance of the application. If the application isn't
' running, an error occurs.
    Set MyXL = Getobject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelWasNotRunning = True
    Err.Clear    ' Clear Err object in case error occurred.

' Check for Microsoft Excel. If Microsoft Excel is running,
' enter it into the Running Object table.
    DetectExcel

' Set the object variable to reference the file you want to see.
    Set MyXL = Getobject("c:vb4MYTEST.XLS")

' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
    MyXL.Application.Visible = True
    MyXL.Parent.Windows(1).Visible = True
     Do manipulations of your  file here.
    ' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
    If ExcelWasNotRunning = True Then 
        MyXL.Application.Quit
    End IF

    Set MyXL = Nothing    ' Release reference to the
                                ' application and spreadsheet.
End Sub

Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
    Const WM_USER = 1024
    Dim hWnd As Long
' If Excel is running this API call returns its handle.
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then    ' 0 means Excel not running.
        Exit Sub
    Else                
    ' Excel is running so use the SendMessage API 
    ' function to enter it in the Running Object Table.
        SendMessage hWnd, WM_USER + 18, 0, 0
    End If
End Sub

See also

  • Functions (Visual Basic for Applications)

[!includeSupport and feedback]

Excel VBA GETOBJECT Function

We can use the GetObject function in VBA in MS Excel to access an ActiveX object from the Excel file and then assign the object to an object variable. To use OLE (Object Linking and Embedding) or COM (Compound Object Module) technology to control any Microsoft application like MS Word, MS Outlook, MS PowerPoint, Internet Explorer, etc., we can use the VBA GETOBJECT function.

We use the CreateObject function to create the object, and the GETOBJECT function returns the reference to the object.

Table of contents
  • Excel VBA GETOBJECT Function
    • Syntax for GETOBJECT Function
    • Example of Excel VBA GETOBJECT Function
    • Things to Remember
    • Recommended Articles

VBA-GETOBJECT

Syntax for GETOBJECT Function

VBA GetObject syntax

The GETOBJECT function has these named arguments:

  1. Pathname: We need to specify the full path and the file name containing the object to retrieve. It is an optional argument. Both arguments in the GetObject function are optional, but if ‘pathname’ omits, the second argument, ‘class’, is required.
  2. Class: This is also an optional argument, as specified earlier also. It accepts a string representing the class of the object.

We use the syntax ‘appname.objecttype’ to specify the ‘class’ argument.

  1. Appname: We need to specify the application name to provide the object.
  2. Object type: We specify the type of class of object to create.

Example of Excel VBA GETOBJECT Function

You can download this VBA GetObject Template here – VBA GetObject Template

Suppose we have a word document containing 3 tables.

VBA GetObject Example 1

VBA GetObject Example 1-1

We want to write a VBA codeVBA code refers to a set of instructions written by the user in the Visual Basic Applications programming language on a Visual Basic Editor (VBE) to perform a specific task.read more that will import all the tables in the document to the Excel sheet. We will need to use the CreateObjectCreateObject, as the name implies, is a function that will create the aforementioned object from Excel VBA. When you create an object using the CreateObject function, it is referred to as late binding.read more and GetObject functions in VBA to do the same.

Steps would be:

  • Create an Excel file and save the file with the .xlsm excel extensionExcel extensions represent the file format. It helps the user to save different types of excel files in various formats. For instance, .xlsx is used for simple data, and XLSM is used to store the VBA code.read more (Excel Macro-Enabled Workbook) as we will need to run the VBA code (a macro).
  • Open the basic visual editor with a shortcut key (Alt+F11) or use the ‘Visual Basic’ command in the ‘Code’ group in the Developer tab in excelEnabling the developer tab in excel can help the user perform various functions for VBA, Macros and Add-ins like importing and exporting XML, designing forms, etc. This tab is disabled by default on excel; thus, the user needs to enable it first from the options menu.read more.
  • Double click on ‘ThisWorkbook’ on the left side of the VBA editorVBA ThisWorkbook refers to the workbook on which the users currently write the code to execute all of the tasks in the current workbook. In this, it doesn’t matter which workbook is active and only requires the reference to the workbook, where the users write the code.read more and choose ‘Workbook’ from the list shown on the screen’s top.

VBA GetObject Example 1-2

  • Choose ‘Open’ from the list.

VBA GetObject Example 1-3

  • Now, we need to write the code in between these two lines.

VBA GetObject Example 1-5

  • First, we will declare variables to hold the objects (MS Word Document and MS Word Application object) and a ‘String Variable’ to hold the document’s name from where we need to extract the tables.

VBA GetObject Example 1-4

  • For error handling, we will add one statement. This statement tells the VBA program to ignore the error and resume the execution with the next line of code. “On Error Resume NextVBA On Error Resume Statement is an error-handling aspect used for ignoring the code line because of which the error occurred and continuing with the next line right after the code line with the error.read more” statement does not fix the runtime errors, but it simply means that program execution will continue from the line following the line that caused the error.

VBA GetObject Example 1-6

  • Now we will use the GetObject function to access the current instance of the Word Application Object.

VBA GetObject Example 1-7

  • If there is no current MS Word application instance, or the ActiveX component cannot create an object or return reference to this object, then error 429. For this, we will add two lines in the code. After handling the error, we need to create an instance of the MS Word Application object using the CreateObject function.

VBA GetObject Example 1-8

  • To make the MS Word Application visible, we will change the visible property of the ‘WdApp’ object to TRUE.

VBA GetObject Example 1-9

  • We need to find the location and file name of the word document from which we want to import the tables into an excel sheet and assign the same to the “strDocName” To find the name and location, we can check out the properties of the file.

To open the ‘Properties’ dialog box, select the file and press ‘Alt+Enter.’

VBA GetObject Example 1-10

Get Object Example 1-11

  • If the file does not exist in the specified location, the code returns the message stating, “The file Marks Details was not found in the folder path.” The title would be “Sorry, that document name does not exist.”

Get Object Example 1-12

  • Now we need to activate the MS Word Application and assign the variable ‘wddoc’ with the word document having the file name stored in the ‘strDocName.’

Get Object Example 1-13

  • If the file is not open, we need to open the document and activate the app.

Get Object Example 1-14

  • After activating the word document, we need to access the tables in the document. To do the same, we will create some variables.

Get Object Example 1-15

Tble is the integer variable that will store the count of tables in the document.

rowWd is the long variable that will store the number of rows in a table.

colWd is the long variable, storing the number of columns in a particular table.

  • We need to count the number of tables in the document, and if they are notable in the document, then we will display a message box to the user that says “No Tables found in the Word document.”

Get Object Example 1-16

  • We will run a ‘For’ VBA loopAll programming languages make use of the VBA For Next loop. After the FOR statement, there is a criterion in this loop, and the code loops until the criteria are reached. read more for several tables to access tables in the document and write the content in the Excel sheet. Within this VBA loopA VBA loop in excel is an instruction to run a code or repeat an action multiple times.read more, we will run nested ‘for’ loops for accessing every row and every column in the row.

Get Object Example 1-17

  • As we do not want to save the document and quit the application, we should also release the system’s memory. To do the same, we will write the following code.

Get Object Example 1-18

Now, whenever we open the excel file, the file is updated with table content from the word document.

VBA Get-Object Example 1-19

Code:

Private Sub Workbook_Open()

Rem Declaring Object variables to access object created by GETOBJECT
Dim WdApp As Object, wddoc As Object
Rem Declaring a string variable to access the Word document
Dim strDocName As String

Rem Error handling
On Error Resume NextVBA On Error Resume Statement is an error-handling aspect used for ignoring the code line because of which the error occurred and continuing with the next line right after the code line with the error.read more

Rem Activating MS Word if it is already opened
Set WdApp = GetObject(, "Word.Application")

If Err.Number = 429 Then
Err.Clear
Rem Creating a Word application object if MS Word is not already opened
Set WdApp = CreateObject("Word.Application")
End If

WdApp.Visible = True

strDocName = "C:UsersCBA7_01DesktopMarks Details.docx"

Rem Checking relevant directory for the relevant document
Rem If not found then informing the user and closing the program
If Dir(strDocName) = "" Then
MsgBox "The file " & strDocName & vbCrLf & "was not found in the folder path" & vbCrLf & "C:UsersCBA7_01.", _vbExclamation, "Sorry, that document name does not exist."
Exit Sub
End If

WdApp.Activate

Set wddoc = WdApp.Documents(strDocName)

If wddoc Is Nothing Then Set wddoc = WdApp.Documents.Open("C:UsersCBA7_01DesktopMarks Details.docx")
wddoc.Activate

Rem Defining variables to access the tables in the word document
Dim Tble As Integer
Dim rowWd As Long
Dim colWd As Integer
Dim x As Long, y As Long
x = 1
y = 1

With wddoc
Tble = wddoc.Tables.Count
If Tble = 0 Then
MsgBox "No Tables found in the Word document", vbExclamation, "No Tables to Import"
Exit Sub
End If

Rem Starting the looping process to access tables and their rows, columns
For i = 1 To Tble
With.Tables(i)
For rowWd = 1 To .Rows.Count
For colWd = 1 To .Columns.Count
Cells(x, y) = WorksheetFunction.Clean(.cell(rowWd, colWd).Range.Text)
Rem Accessing next column
y = y + 1
Next colWd
Rem Going to next row and start from column 1
y = 1
x = x + 1
Next rowWd
End With
Next
End With

Rem we do not need to save the word document
wddoc.Close Savechanges:=False
Rem we quit MS Word application
WdApp.Quit
Rem We finally release system memory allocated for the 2 object variables
Set wddoc = Nothing
Set WdApp = Nothing

End Sub

Things to Remember

  1. A single-instance object is available for which only one instance of the object generates, regardless of the number for which CreateObject is run. For example, the GetObject function always returns the same instance when called with a string of zero length, and an error comes if it does not mention the ‘pathname’ argument.
  2. We cannot use GetObject to access a reference to a class created with VBA.
  3. Suppose there is no active instance of the MS Word Application, or we do not want the object initiated with a file already loaded. In that case, we first use the CreateObject function to create the object and then use the GetObject function to access the object.

Recommended Articles

This article has been a guide to VBA GetObject. Here, we discuss how the GetObject function returns an object’s reference in Excel VBA, practical examples, and a downloadable template. Below you can find some useful Excel VBA articles: –

  • VBA IF Not
  • VBA INSTRREV
  • VBA FileSystemObject
  • VBA Option Explicit

Создание нового экземпляра приложения Word из кода VBA Excel или подключение к открытому для работы с документами. Функции CreateObject и GetObject.

Работа с Word из кода VBA Excel
Часть 1. Управление приложением Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Создание объекта Word.Application

Экземпляр приложения Word необходим для того, чтобы с его помощью создавать новые документы или открывать существующие для редактирования из кода VBA Excel.

Создать новый экземпляр объекта Word.Application можно при помощи раннего или позднего связывания, используя при позднем связывании функцию CreateObject. Подключиться к открытому экземпляру приложения Word можно только при помощи позднего связывания, используя функцию GetObject.

Раннее связывание приложения Word

Создание нового экземпляра Word.Application и присвоение ссылки на него переменной myWord:

‘Создание экземпляра приложения Word

‘с ранней привязкой одной строкой

Dim myWord As New Word.Application

‘Создание экземпляра приложения Word

‘с ранней привязкой двумя строками

Dim myWord As Word.Application

Set myWord = New Word.Application

Для раннего связывания переменной с объектом Word.Application необходимо подключить в редакторе VBA Excel ссылку на библиотеку Microsoft Word Object Library, если она не подключена. Подключается ссылка в окне «References VBAproject», перейти в которое можно через главное меню редактора: Tools–>References…

Раннее связывание позволяет при написании кода использовать лист подсказок для выбора и вставки свойств и методов привязанных объектов (Auto List Members). Если проект VBA Excel создается на заказ, то, после его завершения, раннее связывание следует заменить на позднее, так как на компьютере пользователя может не оказаться нужной библиотеки, и код работать не будет.

Позднее связывание приложения Word

Создание нового экземпляра Word.Application с помощью функции CreateObject и присвоение ссылки на него переменной myWord:

Dim myWord As Object

Set myWord = CreateObject(«Word.Application»)

Присвоение переменной myWord ссылки на открытый экземпляр приложения Word с помощью функции GetObject:

Dim myWord As Object

Set myWord = GetObject(, «Word.Application»)

Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Чтобы ее избежать, следует предусмотреть создание нового экземпляра Word.Application с помощью функции CreateObject, если открытое приложение не будет найдено (смотрите пример 3).

В программы VBA Excel, работающие с Word, следует включать обработчик ошибок.

Закрытие объекта Word.Application

Новый экземпляр приложения Word открывается в фоновом режиме. Если необходимо его отобразить на экране перед завершением программы, используйте следующий код:

‘отображаем приложение Word

myWord.Visible = True

‘освобождаем переменную от ссылки

Set myWord = Nothing

Если перед завершением процедуры VBA Excel необходимо приложение Word закрыть, используйте метод Quit:

‘закрываем приложение Word

myWord.Quit

‘освобождаем переменную от ссылки

Set myWord = Nothing

Если переменная не содержит ссылку на приложение (myWord = Nothing), метод Quit возвратит ошибку. Чтобы этого не произошло, перед применением метода Quit необходимо проверить наличие ссылки в переменной myWord (смотрите пример 3).

Пример 1
Создаем новый экземпляр объекта Word.Application с ранним связыванием и отображаем его на экране:

Sub Primer1()

Dim myWord As New Word.Application

‘———-

‘блок операторов для создания, открытия

‘и редактирования документов Word

‘———-

myWord.Visible = True

Set myWord = Nothing

End Sub

Запустите код примера 1 на выполнение. Вы увидите появившийся на панели задач ярлык приложения Word. Перейдите на него и закройте приложение вручную.

Пример 2
Создаем новый экземпляр объекта Word.Application с поздним связыванием, отображаем его на экране, останавливаем программу и наблюдаем закрытие приложения методом Quit:

Sub Primer2()

Dim myWord As Object

Set myWord = CreateObject(«Word.Application»)

‘———-

‘блок операторов для создания, открытия

‘и редактирования документов Word

‘———-

myWord.Visible = True

MsgBox «Остановка программы»

myWord.Quit

Set myWord = Nothing

End Sub

Запустите код примера 2 на выполнение. Закройте информационное окно MsgBox и смотрите, как исчезнет с панели задач ярлык приложения Word, созданного перед остановкой кода.

Пример 3
Пытаемся создать ссылку на открытый экземпляр приложения Word с помощью функции GetObject, а если открытого экземпляра нет, создаем новый с помощью функции CreateObject:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

Sub Primer3()

Dim myWord As Object

On Error Resume Next

Set myWord = GetObject(, «Word.Application»)

  If myWord Is Nothing Then

    Set myWord = CreateObject(«Word.Application»)

  End If

On Error GoTo Instr

‘———-

‘блок операторов для создания, открытия

‘и редактирования документов Word

‘———-

myWord.Visible = True

Set myWord = Nothing

Exit Sub

Instr:

  If Err.Description <> «» Then

    MsgBox «Произошла ошибка: « & Err.Description

  End If

  If Not myWord Is Nothing Then

    myWord.Quit

    Set myWord = Nothing

  End If

End Sub

Строка On Error Resume Next передаст управление следующему оператору, если открытого экземпляра программы Word не существует, и выполнение функции GetObject приведет к ошибке. В этом случае будет создан новый экземпляр Word.Application с помощью функции CreateObject.

В код добавлен обработчик ошибок On Error GoTo Instr, который поможет корректно завершить программу при возникновении ошибки. А также он позволит во время тестирования не наплодить большое количество ненужных экземпляров приложения Word. Проверяйте их наличие по Диспетчеру задач (Ctrl+Shift+Esc) и удаляйте лишние.

Строка Exit Sub завершит процедуру, если она прошла без ошибок. В случае возникновения ошибки, будет выполнен код после метки Instr:.

Понравилась статья? Поделить с друзьями:
  • Get запрос vba excel
  • Get words from another word
  • Get word to read to you
  • Get word to read aloud
  • Get word past tense