Remkomplekty.ru

IT Новости из мира ПК
2 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Getobject vba excel

Функция GetObject

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

VBA GetObject

Excel VBA GETOBJECT Function

We can use 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, and Internet Explorer, etc., we can use VBA GETOBJECT function.

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

Syntax for GETOBJECT Function

The GET OBJECT Function has these named arguments:

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

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

  1. Appname: We need to specify the application name, which will provide the object.
  2. Objecttype: We specify the type of class of object to create.

Example of Excel VBA GETOBJECT Function

Suppose, we have a word document containing 3 tables.

We want to write a VBA code that will import all the tables in the document to the excel sheet. To do the same, we will need to use CreateObject and GetObject function in VBA.

  • Create an excel file and save the file with the .xlsm extension (Excel Macro-Enabled Workbook) as we will need to run the VBA code (a macro).
  • Open the visual basic editor with a shortcut key (Alt+F11) or using ‘Visual Basic’ command in the ‘Code’ group in the ‘Developer’ tab.
  • Double click on ‘ThisWorkbook’ on the left side of the VBA editor and choose ‘Workbook’ from the list shown thereafter on the top of the screen.
Читать еще:  Несколько диапазонов excel

  • Choose ‘Open’ from the list.

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

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

  • 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 Next” 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.

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

  • If in case, there is no current instance of the MS Word Application or ActiveX component cannot create an object or return reference to this object then error 429. For this, we will add below 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.

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

  • 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, just select the file and press ‘Alt+Enter’.

  • If the file does not exist in the specified location then 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.”

  • 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’.

  • If the file is not opened already then we need to open the document and activate the app.

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

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

rowWd is the long variable, which will store the number of rows in a particular table.

colWd is the long variable, which will store the number of columns in a particular table.

  • We need to count the number of tables in the document and if there is no table in the document then we will display a message box to the user that “No Tables found in the Word document”.

  • To access tables in the document and to write the content in the excel sheet, we will run a ‘For’ VBA loop for a number of tables times and within this VBA loop, we will run nested ‘for’ loops for accessing every row and every column in the row.

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

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

Code:

Things to Remember

  1. There is some single-instance object, for which only one instance of the object is generated, regardless of the number for which CreateObject is run. GetObject function at all times returns the same instance when it is called with a string of zero length and an error comes if the ‘pathname’ argument is not mentioned.
  2. We cannot use GetObject to access a reference to a class created with VBA.
  3. If in case, there is no active instance of the MS Word Application, or we do not want the object initiated with a file already loaded then we first use the CreateObject function to create the object and then use GetObject function to access the object.

Recommended Articles

This has been a guide to VBA GetObject. Here we discuss how GetObject function returns the reference of an object in Excel VBA along with practical examples and a downloadable template. Below you can find some useful excel VBA articles –

VBA Excel. Управление приложением Word

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

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

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

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

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

Читать еще:  Excel vba font

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

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

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

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

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

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

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

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

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

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

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

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

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

Примеры открытия и закрытия Word

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

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

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

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

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

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

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

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

Getobject vba excel

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

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

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

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

Читать еще:  Formular1c1 vba excel

‘Описываем необходимые процедуры 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 на случай ошибки.

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

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

‘Делаем видимым Excel с помощью свойства Application. Затем делаем
‘видимым окно, содержащее файл, с помощью семейства Windows объекта,
‘определяемого ссылкой MyXL.
MyXL.Application.Visible = True
MyXL.Parent.Windows(1).Visible = True

‘Здесь помещаем инструкции
‘по обработке вызванного файла.
‘.
‘Если приложение 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

Thread: GetObject to open Word File

Thread Tools
Display
  • Linear Mode
  • Switch to Hybrid Mode
  • Switch to Threaded Mode

GetObject to open Word File

I have been trying to use VBA to open up a Word document. I wrote some code to do this while also checking to see whether Word was already open but I the result is that the code is continuously jumping to the MsgBox line.

Any help would be greatly appreciated!!

Public Sub Giri()
Dim wrdApp As Word.Application
Dim wrdDoc As Word.Document
Dim FileName As String
Dim myObject As Object

On Error Resume Next

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

If myObject Is Nothing Then

Set wrdApp = CreateObject(«Word.Application»)

For Each wrdDoc In wrdApp

If StrComp(wrdDoc.FullName, FileName, vbTextCompare) = 0 Then

MsgBox «File already Open!»

On Error Resume Next

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

If Err.Number <> 0 Then ‘Word isn’t already running
Set wrdApp = CreateObject(«Word.Application»)
End If

On Error GoTo 0

Set wrdDoc = wrdApp.Documents.Open(FileName)

wrdApp.Visible = True
[/vba]

PLS DO NOT PM; OPEN A THREAD INSTEAD.

1) Posting Code
[CODE]PasteYourCodeHere[/CODE]
(or paste your code, select it, click # button)

2) Uploading File(s)
Go Advanced / Attachments — Manage Attachments / Add Files / Select Files / Select the file(s) (multiple files can be selected while holding Ctrl key) / Upload Files / Done
Replace company specific / sensitive / confidential data. Include so many rows and sheets etc in the uploaded workbook to enable the helpers visualize the data and table structure. Helpers do not need the entire workbook.

3) Testing the Codes
always back up your files before testing the codes.

4) Marking the Thread as Solved
from Thread Tools (on the top right corner, above the first message)

PLS DO NOT PM; OPEN A THREAD INSTEAD.

1) Posting Code
[CODE]PasteYourCodeHere[/CODE]
(or paste your code, select it, click # button)

2) Uploading File(s)
Go Advanced / Attachments — Manage Attachments / Add Files / Select Files / Select the file(s) (multiple files can be selected while holding Ctrl key) / Upload Files / Done
Replace company specific / sensitive / confidential data. Include so many rows and sheets etc in the uploaded workbook to enable the helpers visualize the data and table structure. Helpers do not need the entire workbook.

3) Testing the Codes
always back up your files before testing the codes.

4) Marking the Thread as Solved
from Thread Tools (on the top right corner, above the first message)

The problem is that you did not reset the error to nothing after setting the application object. Another problem is that you did not set the objects to nothing. As it is, a hidden instance could be left at the end.

Here is an example:
[VBA]’http://www.mrexcel.com/forum/showthread.php?t=333200
Sub FillForm()
Dim wdApp As Object, WD As Object, rn As Long
rn = ActiveCell.Row
On Error Resume Next
Set wdApp = GetObject(, «Word.Application»)
If Err.Number <> 0 Then
Set wdApp = CreateObject(«Word.Application»)
End If
On Error GoTo 0

Set WD = wdApp.Documents.Open(ThisWorkbook.Path & «Car Information Page.doc»)

wdApp.Visible = True
With WD
.FormFields(«Brand»).Result = Cells(rn, «B»)
.FormFields(«Model»).Result = Cells(rn, «C»)
.FormFields(«Chasis»).Result = Cells(rn, «D»)
.FormFields(«Engine»).Result = Cells(rn, «E»)
.FormFields(«Color»).Result = Cells(rn, «F»)
.FormFields(«YearMonth»).Result = Cells(rn, «G»).Value & «/» & Cells(rn, «H»).Value
End With

Set WD = Nothing
Set wdApp = Nothing
End Sub[/VBA]

Ссылка на основную публикацию
ВсеИнструменты
Adblock
detector
×
×