VBA GetObject

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. Objecttype: Nous spécifions le type de classe d'objet à créer.

Exemple de fonction Excel VBA GETOBJECT

Vous pouvez télécharger ce modèle VBA GetObject ici - Modèle 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 Visual Basic 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 instruction, 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 signifie simplement que l'exécution du programme continuera à 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 au cas où, il n'y a aucune instance actuelle de l'application MS Word ou du composant ActiveX ne peut pas créer un objet ou renvoyer une référence à cet objet, alors 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, 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 n'a pas été trouvé 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 le «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 n'y a pas de tableau 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 '' pour un certain nombre de tables 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.

Désormais, chaque fois que nous ouvrirons le fichier Excel, le remplissage est mis à jour avec le contenu de la table du document Word.

Code:

Private Sub Workbook_Open () Rem Déclarer des variables Object pour accéder à un objet créé par GETOBJECT Dim WdApp As Object, wddoc As Object Rem Déclarer une variable string pour accéder au document Word Dim strDocName As String Rem Gestion des erreurs On Error Resume Next Rem Activation de MS Word si elle est déjà ouvert Set WdApp = GetObject (, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Création d'un objet d'application Word si MS Word n'est pas déjà ouvert Set WdApp = CreateObject ("Word.Application") End Si WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Vérification du répertoire pertinent pour le document concerné Rem Si non trouvé, informer l'utilisateur et fermer le programme Si Dir (strDocName) = " "Then MsgBox" Le fichier "& strDocName & vbCrLf &"n'a pas été trouvé dans le chemin du dossier "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Désolé, ce nom de document n'existe pas. "Quitter Sub End si WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Si wddoc n'est rien, définissez wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem Définition de variables pour accéder aux tables dans le document Word 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 "Aucune table trouvée dans le document Word", vbExclamation, "Non Tables à importer "Exit Sub End If Rem Démarrage du processus de bouclage pour accéder aux tables et à leurs lignes, colonnes 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 Accès à la colonne suivante y = y + 1 ColWd suivante Rem Aller à la ligne suivante et commencer à partir de la colonne 1 y = 1 x = x + 1 Next rowWd End With Next End Avec Rem, nous n'avons pas besoin de sauvegarder le document Word wddoc.Close Savechanges: = False Rem nous quittons l'application MS Word WdApp.Quit Rem Nous libérons enfin la mémoire système allouée pour les 2 variables objet Set wddoc = Nothing Set WdApp = Nothing End SubQuit Rem Nous libérons enfin la mémoire système allouée pour les 2 variables objet Set wddoc = Nothing Set WdApp = Nothing End SubQuit Rem Nous libérons enfin la mémoire système allouée pour les 2 variables d'objet Set wddoc = Nothing Set WdApp = Nothing End Sub

Choses à retenir

  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 nous utilisons la fonction GetObject pour accéder à l'objet.