VBA GetObject - Jak používat funkci GetObject v aplikaci Excel VBA?

Funkce GETOBJECT aplikace Excel VBA

Můžeme použít funkci GetObject ve VBA v MS Excel k přístupu k objektu ActiveX ze souboru aplikace Excel a následnému přiřazení objektu k proměnné objektu. Chcete-li použít technologii OLE (Object Linking and Embedding) nebo COM (Compound Object Module) k ovládání jakékoli aplikace Microsoft, jako jsou MS Word, MS Outlook, MS PowerPoint a Internet Explorer atd., Můžeme použít funkci VBA GETOBJECT.

K vytvoření objektu používáme funkci CreateObject a funkce GETOBJECT vrací odkaz na objekt.

Syntaxe funkce GETOBJECT

Funkce GET OBJECT má tyto pojmenované argumenty:

  1. Cesta : Musíme zadat úplnou cestu a název souboru obsahujícího objekt, který se má načíst. Toto je volitelný argument, ve skutečnosti jsou oba argumenty ve funkci GetObject volitelné, ale pokud je vynechán 'pathname', je vyžadován druhý argument 'class'.
  2. Třída : Toto je také volitelný argument, jak je uvedeno výše také. To přijímá řetězec představující třídu objektu.

K určení argumentu „třídy“ používáme syntaxi „appname.objecttype“.

  1. Název aplikace: Musíme zadat název aplikace, který objekt poskytne.
  2. Typ objektu: Zadáme typ třídy objektu, který se má vytvořit.

Příklad funkce Excel VBA GETOBJECT

Předpokládejme, že máme textový dokument obsahující 3 tabulky.

Chceme napsat kód VBA, který importuje všechny tabulky v dokumentu do listu aplikace Excel. Abychom udělali totéž, budeme muset použít funkci CreateObject a GetObject ve VBA.

Kroky by byly:

  • Vytvořte soubor aplikace Excel a uložte soubor s příponou .xlsm Excel (sešit aplikace Excel Macro), protože budeme muset spustit kód VBA (makro).
  • Otevřete základní vizuální editor pomocí klávesové zkratky (Alt + F11) nebo pomocí příkazu „Visual Basic“ ve skupině „Code“ na kartě „Developer“ v aplikaci Excel.
  • Poklepejte na 'ThisWorkbook' na levé straně editoru VBA a vyberte 'Workbook' ze seznamu zobrazeného v horní části obrazovky.
  • Ze seznamu vyberte možnost Otevřít.
  • Nyní musíme napsat kód mezi tyto dva řádky.
  • Nejprve deklarujeme proměnné, které budou obsahovat objekty (dokument MS Word a objekt aplikace MS Word), a „řetězcovou proměnnou“, která bude obsahovat název dokumentu, ze kterého musíme extrahovat tabulky.
  • Pro zpracování chyb přidáme jedno prohlášení. Toto prohlášení říká programu VBA, aby ignoroval chybu a pokračoval v provádění s dalším řádkem kódu. Příkaz „On Error Resume Next“ neopravuje runtime chyby, ale jednoduše znamená, že provádění programu bude pokračovat od řádku následujícího po řádku, který chybu způsobil.
  • Nyní použijeme funkci GetObject k získání přístupu k aktuální instanci objektu aplikace Word.
  • Pokud v případě, že neexistuje žádná aktuální instance aplikace MS Word, nebo komponenta ActiveX nemůže vytvořit objekt nebo vrátit odkaz na tento objekt, pak chyba 429. K tomu přidáme pod dva řádky v kódu. Po zpracování chyby musíme vytvořit instanci objektu aplikace MS Word pomocí funkce CreateObject .
  • Aby byla aplikace MS Word viditelná, změníme vlastnost visible objektu 'WdApp' na TRUE .
  • Musíme najít umístění a název souboru z dokumentu aplikace Word, ze které chceme importovat tabulky do listu Excelu a přiřadit stejné pro „strDocName“ Chcete-li najít název a umístění, a můžeme podívat na vlastnosti části soubor.

Chcete-li otevřít dialogové okno „Vlastnosti“ , jednoduše vyberte soubor a stiskněte „Alt + Enter“.

  • Pokud soubor v zadaném umístění neexistuje, vrátí kód zprávu se zprávou „Soubor nebyl nalezen v cestě ke složce.“ Název by byl „Je nám líto, tento název dokumentu neexistuje.“
  • Nyní musíme aktivovat aplikaci MS Word a přiřadit proměnnou 'wddoc' dokumentu aplikace Word s názvem souboru uloženým v 'strDocName.'
  • Pokud soubor ještě není otevřen, musíme otevřít dokument a aktivovat aplikaci.
  • Po aktivaci slova dokument musíme získat přístup k tabulkám v dokumentu. Abychom udělali totéž, vytvoříme několik proměnných.

Tble je celočíselná proměnná, která uloží počet tabulek v dokumentu.

rowWd je dlouhá proměnná, která uloží počet řádků v konkrétní tabulce.

colWd je dlouhá proměnná, která uloží počet sloupců v konkrétní tabulce.

  • Musíme spočítat počet tabulek v dokumentu, a pokud je v dokumentu pozoruhodný, zobrazíme uživateli zprávu se zprávou „V dokumentu Word nebyly nalezeny žádné tabulky.“
  • Pro přístup k tabulkám v dokumentu a pro zápis obsahu do listu aplikace Excel spustíme smyčku VBA 'For' pro několikrát tabulky a v této smyčce VBA spustíme vnořené smyčky 'for' pro přístup ke každému řádku a každý sloupec v řádku.
  • Protože nechceme dokument uložit a ukončit aplikaci. Měli bychom také uvolnit paměť systému. Abychom udělali totéž, napíšeme následující kód.

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

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 Next 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

Věci k zapamatování

  1. Existuje nějaký objekt s jednou instancí, pro který je generována pouze jedna instance objektu, bez ohledu na počet, pro který je CreateObject spuštěn. Funkce GetObject vždy vrací stejnou instanci, když je volána s řetězcem nulové délky, a pokud není uveden argument 'cesta', dojde k chybě.
  2. Nemůžeme použít GetObject pro přístup k odkazu na třídu vytvořenou pomocí VBA.
  3. Pokud v případě, že neexistuje aktivní instance aplikace MS Word, nebo nechceme, aby byl objekt spuštěn s již načteným souborem, vytvoříme nejprve pomocí funkce CreateObject a poté pomocí funkce GetObject přistoupíme k objektu .

Zajímavé články...