VBA GetObject | Com s'utilitza la funció GetObject a Excel VBA?
Funció Excel VBA GETOBJECT
Podem utilitzar la funció GetObject a VBA a MS Excel per accedir a un objecte ActiveX des del fitxer excel i després assignar l’objecte a una variable objecte. Per utilitzar la tecnologia OLE (Object Linking and Embedding) o COM (Compound Object Module) per controlar qualsevol aplicació de Microsoft com MS Word, MS Outlook, MS PowerPoint i Internet Explorer, etc., podem utilitzar la funció VBA GETOBJECT.
Utilitzem la funció CreateObject per crear l’objecte i la funció GETOBJECT retorna la referència a l’objecte.
Sintaxi per a la funció GETOBJECT
La funció GET OBJECT té aquests arguments anomenats:
- Nom de ruta: Hem d’especificar el camí complet i el nom del fitxer que conté l’objecte a recuperar. Aquest és un argument opcional, de fet, tots dos arguments de la funció GetObject són opcionals, però si s'omet el "nom de ruta", es requereix el segon argument "classe".
- Classe: Aquest també és un argument opcional, tal com també s'ha especificat anteriorment. S'accepta una cadena que representa la classe de l'objecte.
Utilitzem la sintaxi ‘appname.objecttype’ per especificar l’argument ‘class’.
- Nom de l'aplicació: Hem d’especificar el nom de l’aplicació, que proporcionarà l’objecte.
- Tipus d'objecte: Especifiquem el tipus de classe d'objecte a crear.
Exemple de la funció Excel VBA GETOBJECT
Podeu descarregar aquesta plantilla VBA GetObject aquí - Plantilla VBA GetObjectSuposem que tenim un document de Word que conté 3 taules.
Volem escriure un codi VBA que importarà totes les taules del document al full Excel. Per fer el mateix, haurem d’utilitzar les funcions CreateObject i GetObject a VBA.
Els passos serien:
- Creeu un fitxer excel i deseu el fitxer amb l'extensió excel .xlsm (llibre de treball Excel Macro-Enabled Workbook), ja que haurem d'executar el codi VBA (una macro).
- Obriu l’editor visual basic amb una tecla de drecera (Alt + F11) o amb l’ordre ‘Visual Basic’ del grup ‘Code’ de la pestanya ‘Developer’ a excel.
- Feu doble clic a "ThisWorkbook" al costat esquerre de l'editor VBA i trieu "Workbook" a la llista que es mostra a continuació a la part superior de la pantalla.
- Trieu "Obre" a la llista.
- Ara hem d’escriure el codi entre aquestes dues línies.
- En primer lloc, declararem variables per contenir els objectes (document MS Word i objecte d’aplicació MS Word) i una ‘variable de cadena’ per contenir el nom del document d’on hem d’extreure les taules.
- Per al maneig d’errors, afegirem una sentència, aquesta sentència indica al programa VBA que ignori l’error i que reprengui l’execució amb la següent línia de codi. La instrucció "On Error Resume Next" no corregeix els errors en temps d'execució, però simplement significa que l'execució del programa continuarà des de la línia que segueix la línia que ha provocat l'error.
- Ara farem servir Funció GetObject per accedir a la instància actual de l'objecte d'aplicació de Word.
- Si en el cas, no hi ha cap instància actual de l'aplicació MS Word o el component ActiveX no pugui crear un objecte ni retornar referència a aquest objecte, llavors hi haurà l'error 429. Per a això, afegirem a continuació dues línies al codi. Després de gestionar l'error, hem de crear una instància de l'objecte de l'aplicació MS Word mitjançant el fitxer Funció CreateObject.
- Per fer visible l'aplicació MS Word, canviarem la propietat visible del fitxer "WdApp" oposar-se a CERT.
- Hem de trobar la ubicació i el nom del fitxer del document de Word des del qual volem importar les taules a un full Excel i assignar-lo al "StrDocName" Per trobar el nom i la ubicació, podem consultar el fitxer propietats del fitxer.
Per obrir el fitxer "Propietats" , seleccioneu el fitxer i premeu "Alt + Retorn".
- Si el fitxer no existeix a la ubicació especificada, el codi retorna el missatge que indica "El fitxer marca els detalls no s'ha trobat al camí de la carpeta". El títol seria "Ho sento, aquest nom del document no existeix".
- Ara hem d’activar l’aplicació MS Word i assignar la variable "Wddoc" amb el document de Word que té el nom del fitxer emmagatzemat a "StrDocName".
- Si el fitxer ja no està obert, hem d'obrir el document i activar l'aplicació.
- Després d’activar el document de Word, hem d’accedir a les taules del document. Per fer el mateix, crearem algunes variables.
Tble és la variable sencera, que emmagatzemarà el recompte de taules al document.
rowWd és la variable llarga, que emmagatzemarà el nombre de files en una taula concreta.
colWd és la variable llarga, que emmagatzemarà el nombre de columnes en una taula concreta.
- Hem de comptar el nombre de taules del document i, si no hi ha cap taula, mostrarem un quadre de missatge a l’usuari que "No s'ha trobat cap taula al document de Word".
- Per accedir a les taules del document i escriure el contingut al full Excel, executarem un bucle VBA "Per" per a diverses taules i dins d'aquest bucle VBA, executarem bucles imbricats "per" per accedir a cada fila i totes les columnes de la fila.
- Com que no volem desar el document i sortir de l'aplicació. També hauríem d’alliberar la memòria del sistema. Per fer el mateix, escriurem el següent codi.
Ara, sempre que obrirem el fitxer Excel, el farciment s'actualitza amb el contingut de la taula del document de Word.
Codi:
Private Sub Workbook_Open () Rem Declaració de variables d'objecte per accedir a l'objecte creat per GETOBJECT Dim WdApp com a objecte, wddoc As Object Rem Declaració d'una variable de cadena per accedir al document de Word Dim strDocName Com a cadena Rem Gestió d'errors En error Reprèn Següent Rem Activació de MS Word si ja està obert Establir WdApp = GetObject (, "Word.Application") Si Err.Number = 429 Llavors Err.Clear Rem Creació d'un objecte d'aplicació de Word si MS Word encara no està obert Establir WdApp = CreateObject ("Word.Application") Fi If WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Comprovació del directori rellevant del document pertinent Rem Si no es troba, informeu l'usuari i tanqueu el programa If Dir (strDocName) = " "Aleshores MsgBox" El fitxer "& strDocName & vbCrLf &" no s'ha trobat al camí de la carpeta "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _VbExclamation," Ho sentim, aquest nom del document no existeix. " Surt del final final si WdApp.Activate Set wddoc = WdApp.Documents (strDocName) Si wddoc no és res, definiu wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem Definició de variables per accedir a les taules del document de Word Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x Long, y As Long x = 1 y = 1 With wddoc Tble = wddoc.Tables.Count If Tble = 0 Then MsgBox "No s'ha trobat cap taula al document de Word", vbExclamation, "No hi ha taules a importar" Sortir del subfinit Si s'inicia el procés de bucle per accedir a les taules i les seves files, columnes Per a i = 1 Per incloure amb. Taules (i) Per a filaWd = 1 To .Rows.Count For colWd = 1 To .Columns.Count Cells (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Accedint a la següent columna y = y + 1 Següent colWd Rem Anar a la fila següent i començar des de la columna 1 y = 1 x = x + 1 fila següent Wd Acabar amb el següent final amb Rem no cal que guardem el document de Word wddoc. Tancar Savechanges: = False Rem, sortim de l'aplicació MS Word Wd App.Quit Rem Finalment alliberem la memòria del sistema assignada per a les 2 variables objecte Establir wddoc = Res Establir WdApp = Res final Sub
Coses que cal recordar
- Hi ha algun objecte d'una sola instància, per al qual només es genera una instància de l'objecte, independentment del número per al qual s'executi CreateObject. La funció GetObject torna en tot moment la mateixa instància quan es crida amb una cadena de longitud zero i apareix un error si no s’esmenta l’argument ‘nom de ruta’.
- No podem utilitzar GetObject per accedir a una referència a una classe creada amb VBA.
- Si en el cas, no hi ha cap instància activa de l’aplicació MS Word, o no volem que l’objecte s’iniciï amb un fitxer ja carregat, primer utilitzarem la funció CreateObject per crear l’objecte i, a continuació, utilitzarem la funció GetObject per accedir a l’objecte.