VBA GetObject - Comment utiliser la fonction GetObject dans Excel VBA?

Table des matières

Fonction Excel VBA GETOBJECT

Nous pouvons utiliser la fonction GetObject dans VBA dans MS Excel pour accéder à un objet ActiveX à partir du fichier Excel, puis affecter l'objet à une variable d'objet. Pour utiliser la technologie OLE (Object Linking and Embedding) ou COM (Compound Object Module) pour contrôler n'importe quelle application Microsoft comme MS Word, MS Outlook, MS PowerPoint et Internet Explorer, etc., nous pouvons utiliser la fonction VBA GETOBJECT.

Nous utilisons la fonction CreateObject pour créer l'objet et la fonction GETOBJECT renvoie la référence à l'objet.

Syntaxe de la fonction GETOBJECT

La fonction GET OBJECT a ces arguments nommés:

  1. Chemin d'accès: nous devons spécifier le chemin complet et le nom du fichier contenant l'objet à récupérer. C'est un argument facultatif, en fait, les deux arguments de la fonction GetObject sont facultatifs, mais si «chemin d'accès» est omis, le deuxième argument «classe» est requis.
  2. Classe : il s'agit également d'un argument facultatif comme spécifié précédemment. Cela accepte une chaîne représentant la classe de l'objet.

Nous utilisons la syntaxe 'appname.objecttype' pour spécifier l'argument 'class'.

  1. Appname: nous devons spécifier le nom de l'application, qui fournira l'objet.
  2. Type d'objet: Nous spécifions le type de classe d'objet à créer.

Exemple de fonction Excel VBA GETOBJECT

Supposons que nous ayons un document Word contenant 3 tableaux.

Nous voulons écrire un code VBA qui importera toutes les tables du document dans la feuille Excel. Pour faire de même, nous devrons utiliser la fonction CreateObject et GetObject dans VBA.

Les étapes seraient:

  • Créez un fichier Excel et enregistrez le fichier avec l'extension .xlsm Excel (Excel Macro-Enabled Workbook) car nous aurons besoin d'exécuter le code VBA (une macro).
  • Ouvrez l'éditeur visuel de base avec une touche de raccourci (Alt + F11) ou en utilisant la commande 'Visual Basic' dans le groupe 'Code' de l'onglet 'Développeur' dans Excel.
  • Double-cliquez sur 'ThisWorkbook' sur le côté gauche de l'éditeur VBA et choisissez 'Workbook' dans la liste affichée par la suite en haut de l'écran.
  • Choisissez «Ouvrir» dans la liste.
  • Nous devons maintenant écrire le code entre ces deux lignes.
  • Tout d'abord, nous déclarerons des variables pour contenir les objets (document MS Word et objet Application MS Word) et une «variable de chaîne» pour contenir le nom du document à partir duquel nous devons extraire les tableaux.
  • Pour la gestion des erreurs, nous ajouterons une déclaration. Cette instruction indique au programme VBA d'ignorer l'erreur et de reprendre l'exécution avec la ligne de code suivante. L'instruction «On Error Resume Next» ne corrige pas les erreurs d'exécution, mais cela signifie simplement que l'exécution du programme se poursuivra à partir de la ligne suivant la ligne qui a causé l'erreur.
  • Nous allons maintenant utiliser la fonction GetObject pour accéder à l'instance actuelle de l'objet d'application Word.
  • Si dans le cas où il n'y a pas d'instance actuelle de l'application MS Word, ou si le composant ActiveX ne peut pas créer un objet ou renvoyer une référence à cet objet, alors l'erreur 429. Pour cela, nous ajouterons ci-dessous deux lignes dans le code. Après avoir traité l'erreur, nous devons créer une instance de l'objet Application MS Word à l'aide de la fonction CreateObject .
  • Pour rendre l'application MS Word visible, nous allons changer la propriété visible de l' objet 'WdApp' en TRUE .
  • Nous devons trouver l'emplacement et le nom de fichier du document Word à partir duquel nous voulons importer les tables dans une feuille Excel et attribuer la même chose au "strDocName" Pour trouver le nom et l'emplacement, et nous pouvons vérifier les propriétés du fichier.

Pour ouvrir la boîte de dialogue "Propriétés" , sélectionnez simplement le fichier et appuyez sur "Alt + Entrée".

  • Si le fichier n'existe pas à l'emplacement spécifié, le code renvoie le message indiquant: «Le fichier Marks Details est introuvable dans le chemin du dossier.» Le titre serait "Désolé, ce nom de document n'existe pas."
  • Maintenant, nous devons activer l'application MS Word et affecter la variable «wddoc» avec le document Word dont le nom de fichier est stocké dans «strDocName».
  • Si le fichier n'est pas déjà ouvert, nous devons ouvrir le document et activer l'application.
  • Après avoir activé le document Word, nous devons accéder aux tableaux du document. Pour faire de même, nous allons créer des variables.

Tble est la variable entière, qui stockera le nombre de tables dans le document.

rowWd est la variable longue, qui stockera le nombre de lignes dans une table particulière.

colWd est la variable longue, qui stockera le nombre de colonnes dans une table particulière.

  • Nous devons compter le nombre de tableaux dans le document, et s'il y a des éléments notables dans le document, nous afficherons une boîte de message à l'utilisateur indiquant «Aucune table trouvée dans le document Word».
  • Pour accéder aux tables du document et pour écrire le contenu dans la feuille Excel, nous exécuterons une boucle VBA `` For '' plusieurs fois, et dans cette boucle VBA, nous exécuterons des boucles `` for '' imbriquées pour accéder à chaque ligne et chaque colonne de la ligne.
  • Comme nous ne voulons pas enregistrer le document et quitter l'application. Nous devons également libérer la mémoire du système. Pour faire de même, nous écrirons le code suivant.

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

Choses dont il faut se rappeler

  1. Il existe un objet à instance unique, pour lequel une seule instance de l'objet est générée, quel que soit le numéro pour lequel CreateObject est exécuté. La fonction GetObject renvoie à tout moment la même instance lorsqu'elle est appelée avec une chaîne de longueur nulle, et une erreur survient si l'argument «chemin» n'est pas mentionné.
  2. Nous ne pouvons pas utiliser GetObject pour accéder à une référence à une classe créée avec VBA.
  3. Si dans le cas, il n'y a pas d'instance active de l'application MS Word, ou si nous ne voulons pas que l'objet soit lancé avec un fichier déjà chargé, nous utilisons d'abord la fonction CreateObject pour créer l'objet, puis la fonction GetObject pour accéder à l'objet .

Articles intéressants...