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:
- 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'.
- 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“.
- Název aplikace: Musíme zadat název aplikace, který objekt poskytne.
- Typ objektu: Zadáme typ třídy objektu, který se má vytvořit.
Příklad funkce Excel VBA GETOBJECT
Tuto šablonu VBA GetObject si můžete stáhnout zde - Šablona VBA GetObjectPř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 učinili totéž, budeme muset ve VBA použít funkci CreateObject a GetObject.
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 editor jazyka Visual Basic 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 v následujícím seznamu v horní části obrazovky vyberte 'Workbook'.
- 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 jeden příkaz, tento příkaz ří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 pro získání přístupu k aktuální instanci objektu aplikace Word.
- Pokud v případě, že neexistuje 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 dokumentu aplikace Word, ze kterého chceme importovat tabulky do listu aplikace Excel, a přiřadit to stejnému „strDocName“. Chcete-li zjistit název a umístění, můžeme zkontrolovat vlastnosti souboru. .
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 označil podrobnosti nebyl v cestě ke složce nalezen“. 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 již 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 v dokumentu není žádná tabulka, 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ěkolik tabulek 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.
Nyní, kdykoli otevřete soubor aplikace Excel, je výplň aktualizována o obsah tabulky z dokumentu aplikace Word.
Kód:
Private Sub Workbook_Open () Rem Deklarace proměnných objektu pro přístup k objektu vytvořenému GETOBJECT Dim WdApp jako objekt, wddoc jako objekt Rem Deklarace řetězcové proměnné pro přístup k dokumentu Word Dim strDocName jako řetězec Rem Zpracování chyby při chybě Pokračovat Další Rem Aktivace MS Word je již otevřen Set WdApp = GetObject (, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Vytvoření objektu aplikace Word, pokud již není MS Word otevřen Set WdApp = CreateObject ("Word.Application") Konec If WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Kontrola příslušného adresáře pro příslušný dokument Rem Pokud nebyl nalezen, informování uživatele a ukončení programu If Dir (strDocName) = " „Then MsgBox„ The file “& strDocName & vbCrLf &“nebyl nalezen v cestě ke složce „& vbCrLf &“ C: \ Users \ CBA7_01 \. ", _vbExclamation," Omlouváme se, tento název dokumentu neexistuje. "Ukončit Sub End Pokud WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Pokud wddoc nic není, nastavte wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem Definování proměnných pro přístup k tabulkám v dokumentu aplikace Word Dim Table 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 Tabulky k importu „Ukončit Sub End If Rem Zahájení procesu vytváření smyček pro přístup k tabulkám a jejich řádkům, sloupcům 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 Přístup do dalšího sloupce y = y + 1 Další sloupec Rem Přechod na další řádek a začátek od sloupce 1 y = 1 x = x + 1 Další řádek Wd Konec s dalším Konec s Rem nemusíme ukládat wordový dokument wddoc.Close Savechanges: = False Rem jsme ukončili aplikaci MS Word WdApp.Quit Rem Nakonec uvolníme systémovou paměť přidělenou pro 2 objektové proměnné Set wddoc = Nic není nastaveno WdApp = Nic není Sub SubQuit Rem Nakonec uvolníme systémovou paměť přidělenou pro 2 objektové proměnné Set wddoc = nic Set WdApp = nic End SubQuit Rem Nakonec uvolníme systémovou paměť přidělenou pro 2 objektové proměnné Set wddoc = nic Set WdApp = nic End Sub
Věci k zapamatování
- 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ě.
- Nemůžeme použít GetObject pro přístup k odkazu na třídu vytvořenou pomocí VBA.
- Pokud v případě, že neexistuje žádná aktivní instance aplikace MS Word, nebo nechceme, aby byl objekt spuštěn s již načteným souborem, nejprve vytvoříme objekt pomocí funkce CreateObject a poté k přístupu k objektu použijeme funkci GetObject.