VBA GetObject - Как да използвам функцията GetObject в Excel VBA?

Функция Excel VBA GETOBJECT

Можем да използваме функцията GetObject във VBA в MS Excel за достъп до ActiveX обект от Excel файла и след това да присвоим обекта на обектна променлива. За да използваме OLE (Object Linking and Embedding) или COM (Compound Object Module) технология за управление на всяко приложение на Microsoft като MS Word, MS Outlook, MS PowerPoint и Internet Explorer и др., Можем да използваме функцията VBA GETOBJECT.

Използваме функцията CreateObject, за да създадем обекта, а функцията GETOBJECT връща препратката към обекта.

Синтаксис за функцията GETOBJECT

Функцията GET OBJECT има тези именувани аргументи:

  1. Pathname: Трябва да посочим пълния път и името на файла, съдържащ обекта за извличане. Това е незадължителен аргумент, всъщност и двата аргумента във функцията GetObject са незадължителни, но ако 'pathname' е пропуснато, се изисква вторият аргумент 'class'.
  2. Клас : Това също е незадължителен аргумент, както е посочено и по-рано. Това приема низ, представляващ класа на обекта.

Използваме синтаксиса „appname.objecttype“, за да зададем аргумент „class“.

  1. Име на приложението: Трябва да посочим името на приложението, което ще предостави обекта.
  2. Тип обект: Посочваме типа клас обект, който да се създаде.

Пример за функция VBA GETOBJECT на Excel

Да предположим, че имаме документ с думи, съдържащ 3 таблици.

Искаме да напишем VBA код, който да импортира всички таблици в документа в Excel листа. За да направим същото, ще трябва да използваме функциите CreateObject и GetObject във VBA.

Стъпките ще бъдат:

  • Създайте файл на Excel и запишете файла с разширението .xlsm excel (Excel Macro-Enabled Workbook), тъй като ще трябва да стартираме кода на VBA (макрос).
  • Отворете основния визуален редактор с клавиш за бърз достъп (Alt + F11) или като използвате командата „Visual Basic“ в групата „Код“ в раздела „Разработчик“ в Excel.
  • Щракнете двукратно върху „ThisWorkbook“ отляво на редактора на VBA и изберете „Workbook“ от списъка, показан след това в горната част на екрана.
  • Изберете „Отваряне“ от списъка.
  • Сега трябва да напишем кода между тези два реда.
  • Първо, ние ще декларираме променливи, които да съхраняват обектите (MS Word Document и MS Word Application object) и „String Variable“, за да съхраняваме името на документа, откъдето трябва да извлечем таблиците.
  • За обработка на грешки ще добавим едно изявление. Това изявление казва на програмата VBA да игнорира грешката и да възобнови изпълнението със следващия ред код. Изразът „При грешка възобновяване нататък“ не коригира грешките по време на изпълнение, но просто означава, че изпълнението на програмата ще продължи от реда, следващ реда, който е причинил грешката.
  • Сега ще използваме функцията GetObject, за да получим достъп до текущия екземпляр на Word Application Object.
  • Ако в случай че няма текущ екземпляр на приложението MS Word или компонентът ActiveX не може да създаде обект или да върне препратка към този обект, тогава грешка 429. За това ще добавим по-долу два реда в кода. След обработката на грешката трябва да създадем екземпляр на обекта на MS Word Application, използвайки функцията CreateObject .
  • За да направим приложението MS Word видимо, ще променим видимото свойство на обекта 'WdApp' на TRUE .
  • Трябва да намерим местоположението и името на файла на word документа, от който искаме да импортираме таблиците в Excel лист и да присвоим същото на „strDocName“ За да намерим името и местоположението, и можем да проверим свойствата на файл.

За да отворите диалоговия прозорец Свойства“, просто изберете файла и натиснете „Alt + Enter“.

  • Ако файлът не съществува в посоченото местоположение, тогава кодът връща съобщението, в което се казва: „Файлът Marks Details не е намерен в пътя на папката.“ Заглавието ще бъде „Извинете, това име на документ не съществува.“
  • Сега трябва да активираме приложението MS Word и да присвоим променливата 'wddoc' с документа на думата, съдържащ името на файла, съхранено в 'strDocName.'
  • Ако файлът вече не е отворен, трябва да отворим документа и да активираме приложението.
  • След активиране на word документа, трябва да осъществим достъп до таблиците в документа. За да направим същото, ще създадем някои променливи.

Tble е целочислената променлива, която ще съхранява броя на таблиците в документа.

rowWd е дългата променлива, която ще съхранява броя на редовете в определена таблица.

colWd е дългата променлива, която ще съхранява броя на колоните в определена таблица.

  • Трябва да преброим броя на таблиците в документа и ако в документа има забележителни, ще покажем на потребителя поле за съобщение, че „В документа на Word не са намерени таблици“.
  • За достъп до таблици в документа и за записване на съдържанието в Excel листа, ние ще стартираме цикъл „За“ VBA няколко пъти, а в този цикъл VBA ще изпълним вложени цикли „за“ за достъп до всеки ред и всяка колона в реда.
  • Тъй като не искаме да запазваме документа и да излезем от приложението. Трябва също да освободим паметта на системата. За да направим същото, ще напишем следния код.

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

Код:

Private Sub Workbook_Open () Rem Деклариране на обектни променливи за достъп до обект, създаден от GETOBJECT Dim WdApp като обект, wddoc като обект Rem Деклариране на низова променлива за достъп до документа на Word Dim strDocName Като низ Rem Обработка на грешка При грешка Рез вече е отворен Set WdApp = GetObject (, "Word.Application") Ако Err.Number = 429 Тогава Err.Clear Rem Създаване на обект на приложение на Word, ако MS Word вече не е отворен Set WdApp = CreateObject ("Word.Application") End If WdApp.Visible = True strDocName = "C: Users CBA7_01 Desktop Marks Details.docx" Rem Проверка на съответната директория за съответния документ Rem Ако не е намерен, информиране на потребителя и затваряне на програмата If Dir (strDocName) = " "Тогава MsgBox" Файлът "& strDocName & vbCrLf &"не беше намерен в пътя на папката "& vbCrLf &" C: Users CBA7_01 . ", _vbExclamation," Извинете, името на документа не съществува. " ) Ако wddoc не е нищо, тогава задайте wddoc = WdApp.Documents.Open ("C: Users CBA7_01 Desktop Marks Details.docx") wddoc.Activate Rem Defining променливи за достъп до таблиците в word word Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 С wddoc Tble = wddoc.Tables.Count If Tble = 0 Тогава MsgBox "Няма намерени таблици в документа на Word", vbExclamation, "Не Таблици за импортиране "Exit Sub End If Rem Стартиране на процеса на циклиране за достъп до таблици и техните редове, колони За i = 1 За Tble С. Таблици (i) За rowWd = 1 За .Rows.Count За colWd = 1 За. Колони.Count Cells (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Достъп до следващата колона y = y + 1 Следващ colWd Rem Отивате до следващия ред и започвате от колона 1 y = 1 x = x + 1 Следващ ред Wd End With Next End With Rem не е необходимо да запазваме документа на думата wddoc.Close Savechanges: = False Rem излизаме от приложението MS Word WdApp.Quit Rem Най-накрая освобождаваме системната памет, разпределена за 2 обектни променливи Задайте wddoc = Нищо не е зададено WdApp = Нищо не завършва SubQuit Rem Най-накрая освобождаваме системната памет, разпределена за двете обектни променливи Set wddoc = Нищо Set WdApp = Нищо Край SubQuit Rem Най-накрая освобождаваме системната памет, разпределена за двете обектни променливи Set wddoc = Нищо Set WdApp = Нищо Край Sub

Неща за запомняне

  1. Има някакъв обект от един екземпляр, за който се генерира само един екземпляр на обекта, независимо от броя, за който се изпълнява CreateObject. Функцията GetObject по всяко време връща един и същ екземпляр, когато е извикан с низ с нулева дължина и се появява грешка, ако аргументът "pathname" не е споменат.
  2. Не можем да използваме GetObject за достъп до препратка към клас, създаден с VBA.
  3. Ако в случай че няма активен екземпляр на приложението MS Word или не искаме обектът да е иницииран с вече зареден файл, тогава първо използваме функцията CreateObject за създаване на обекта и след това използваме функцията GetObject за достъп до обекта .

Интересни статии...