Recherche…


Introduction

Si vous utilisez les objets dans d'autres applications dans le cadre de votre application Visual Basic, vous souhaiterez peut-être établir une référence aux bibliothèques d'objets de ces applications. Cette documentation fournit une liste, des sources et des exemples d'utilisation des bibliothèques de différents logiciels, tels que Windows Shell, Internet Explorer, XML HttpRequest, etc.

Syntaxe

  • expression.CreateObject (ObjectName)
  • expression; Champs obligatoires. Une expression qui renvoie un objet Application.
  • ObjectName; Chaîne requise. Le nom de classe de l'objet à créer. Pour plus d'informations sur les noms de classe valides, voir Identificateurs programmatiques OLE.

Remarques

Lorsqu'une application prend en charge l'automatisation, Visual Basic permet d'accéder aux objets exposés par l'application. Utilisez Visual Basic pour manipuler ces objets en appelant des méthodes sur l'objet ou en obtenant et en définissant les propriétés de l'objet.

Si vous utilisez les objets dans d'autres applications dans le cadre de votre application Visual Basic, vous souhaiterez peut-être établir une référence aux bibliothèques d'objets de ces applications. Avant de pouvoir le faire, vous devez d'abord vous assurer que l'application fournit une bibliothèque d'objets.

Vous permet de sélectionner les objets d'une autre application que vous souhaitez mettre à disposition dans votre code en définissant une référence à la bibliothèque d'objets de cette application.

Crée un objet Automation de la classe spécifiée. Si l'application est déjà en cours d'exécution, CreateObject va créer une nouvelle instance.

Expressions régulières VBScript

Set createVBScriptRegExObject = CreateObject("vbscript.RegExp")

Outils> Références> Expressions régulières Microsoft VBScript #. #
DLL associée: VBScript.dll
Source: Internet Explorer 1.0 et 5.5

Code

Vous pouvez utiliser cette fonction pour obtenir des résultats RegEx, concaténer toutes les correspondances (si plus de 1) en 1 chaîne et afficher le résultat dans la cellule Excel.

Public Function getRegExResult(ByVal SourceString As String, Optional ByVal RegExPattern As String = "\d+", _
    Optional ByVal isGlobalSearch As Boolean = True, Optional ByVal isCaseSensitive As Boolean = False, Optional ByVal Delimiter As String = ";") As String
    
    Static RegExObject As Object
    If RegExObject Is Nothing Then
        Set RegExObject = createVBScriptRegExObject
    End If
    
    getRegExResult = removeLeadingDelimiter(concatObjectItems(getRegExMatches(RegExObject, SourceString, RegExPattern, isGlobalSearch, isCaseSensitive), Delimiter), Delimiter)
    
End Function

Private Function getRegExMatches(ByRef RegExObj As Object, _
    ByVal SourceString As String, ByVal RegExPattern As String, ByVal isGlobalSearch As Boolean, ByVal isCaseSensitive As Boolean) As Object

    With RegExObj
        .Global = isGlobalSearch
        .IgnoreCase = Not (isCaseSensitive) 'it is more user friendly to use positive meaning of argument, like isCaseSensitive, than to use negative IgnoreCase
        .Pattern = RegExPattern
        Set getRegExMatches = .Execute(SourceString)
    End With
    
End Function

Private Function concatObjectItems(ByRef Obj As Object, Optional ByVal DelimiterCustom As String = ";") As String
    Dim ObjElement As Variant
    For Each ObjElement In Obj
        concatObjectItems = concatObjectItems & DelimiterCustom & ObjElement.Value
    Next
End Function

Public Function removeLeadingDelimiter(ByVal SourceString As String, ByVal Delimiter As String) As String
    If Left$(SourceString, Len(Delimiter)) = Delimiter Then
        removeLeadingDelimiter = Mid$(SourceString, Len(Delimiter) + 1)
    End If
End Function

Private Function createVBScriptRegExObject() As Object
    Set createVBScriptRegExObject = CreateObject("vbscript.RegExp") 'ex.: createVBScriptRegExObject.Pattern
End Function

Objet de système de fichiers de script

Set createScriptingFileSystemObject = CreateObject("Scripting.FileSystemObject")

Outils> Références> Microsoft Scripting Runtime
DLL associée: ScrRun.dll
Source: Windows OS

MSDN-Accès aux fichiers avec FileSystemObject

Le modèle FSO (File System Object) fournit un outil basé sur des objets pour travailler avec des dossiers et des fichiers. Il vous permet d'utiliser la syntaxe object.method familière avec un ensemble riche de propriétés, de méthodes et d'événements pour traiter les dossiers et les fichiers. Vous pouvez également utiliser les instructions et les commandes Visual Basic traditionnelles.

Le modèle FSO permet à votre application de créer, modifier, déplacer et supprimer des dossiers ou de déterminer si et où des dossiers particuliers existent. Il vous permet également d'obtenir des informations sur les dossiers, tels que leurs noms et la date à laquelle ils ont été créés ou modifiés pour la dernière fois.

Rubriques MSDN-FileSystemObject : " ... explique le concept de l'objet FileSystemObject et comment l'utiliser " exceltrick-FileSystemObject dans VBA
Scripting.FileSystemObject

Objet de script de script

Set dict = CreateObject("Scripting.Dictionary")

Outils> Références> Microsoft Scripting Runtime
DLL associée: ScrRun.dll
Source: Windows OS

Objet Scripting.Dictionary
Objet Dictionnaire MSDN

Objet Internet Explorer

Set createInternetExplorerObject = CreateObject("InternetExplorer.Application")

Outils> Références> Microsoft Internet Controls
DLL associée: ieframe.dll
Source: Navigateur Internet Explorer

Objet MSDN-InternetExplorer

Contrôle une instance de Windows Internet Explorer via l'automatisation.

Membres Basic Internet Explorer Objec

Le code ci-dessous devrait indiquer comment fonctionne l'objet IE et comment le manipuler via VBA. Je vous recommande de passer à travers, sinon il pourrait y avoir une erreur lors de plusieurs navigations.

Sub IEGetToKnow()
    Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
    Set IE = New InternetExplorer
    
    With IE
        .Visible = True 'Sets or gets a value that indicates whether the object is visible or hidden.
        
        'Navigation
        .Navigate2 "http://www.example.com" 'Navigates the browser to a location that might not be expressed as a URL, such as a PIDL for an entity in the Windows Shell namespace.
        Debug.Print .Busy 'Gets a value that indicates whether the object is engaged in a navigation or downloading operation.
        Debug.Print .ReadyState 'Gets the ready state of the object.
        .Navigate2 "http://www.example.com/2"
        .GoBack 'Navigates backward one item in the history list
        .GoForward 'Navigates forward one item in the history list.
        .GoHome 'Navigates to the current home or start page.
        .Stop 'Cancels a pending navigation or download, and stops dynamic page elements, such as background sounds and animations.
        .Refresh 'Reloads the file that is currently displayed in the object.
        
        Debug.Print .Silent 'Sets or gets a value that indicates whether the object can display dialog boxes.
        Debug.Print .Type 'Gets the user type name of the contained document object.
        
        Debug.Print .Top 'Sets or gets the coordinate of the top edge of the object.
        Debug.Print .Left 'Sets or gets the coordinate of the left edge of the object.
        Debug.Print .Height 'Sets or gets the height of the object.
        Debug.Print .Width 'Sets or gets the width of the object.
    End With
    
    IE.Quit 'close the application window
End Sub

Web Scraping

La chose la plus courante avec IE est de collecter des informations sur un site Web ou de remplir un formulaire de site Web et de soumettre des informations. Nous allons voir comment le faire.

Considérons le code source example.com :

<!doctype html>
<html>
    <head>
        <title>Example Domain</title>
        <meta charset="utf-8" />
        <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <style ... </style> 
    </head>

    <body>
        <div>
            <h1>Example Domain</h1>
            <p>This domain is established to be used for illustrative examples in documents. You may use this
            domain in examples without prior coordination or asking for permission.</p>
            <p><a href="http://www.iana.org/domains/example">More information...</a></p>
        </div>
    </body>
</html>

Nous pouvons utiliser le code ci-dessous pour obtenir et définir des informations:

Sub IEWebScrape1()
    Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
    Set IE = New InternetExplorer
    
    With IE
        .Visible = True
        .Navigate2 "http://www.example.com"
        
        'we add a loop to be sure the website is loaded and ready.
        'Does not work consistently. Cannot be relied upon.
        Do While .Busy = True Or .ReadyState <> READYSTATE_COMPLETE 'Equivalent = .ReadyState <> 4
            ' DoEvents - worth considering. Know implications before you use it.
            Application.Wait (Now + TimeValue("00:00:01")) 'Wait 1 second, then check again.
        Loop
        
        'Print info in immediate window
        With .Document 'the source code HTML "below" the displayed page.
            Stop 'VBE Stop. Continue line by line to see what happens.
            Debug.Print .GetElementsByTagName("title")(0).innerHtml 'prints "Example Domain"
            Debug.Print .GetElementsByTagName("h1")(0).innerHtml 'prints "Example Domain"
            Debug.Print .GetElementsByTagName("p")(0).innerHtml 'prints "This domain is established..."
            Debug.Print .GetElementsByTagName("p")(1).innerHtml 'prints "<a href="http://www.iana.org/domains/example">More information...</a>"
            Debug.Print .GetElementsByTagName("p")(1).innerText 'prints "More information..."
            Debug.Print .GetElementsByTagName("a")(0).innerText 'prints "More information..."
            
            'We can change the localy displayed website. Don't worry about breaking the site.
            .GetElementsByTagName("title")(0).innerHtml = "Psst, scraping..."
            .GetElementsByTagName("h1")(0).innerHtml = "Let me try something fishy." 'You have just changed the local HTML of the site.
            .GetElementsByTagName("p")(0).innerHtml = "Lorem ipsum........... The End"
            .GetElementsByTagName("a")(0).innerText = "iana.org"
        End With '.document
        
        .Quit 'close the application window
    End With 'ie
    
End Sub

Que se passe-t-il? Le joueur clé ici est la .Document, qui est le code source HTML. Nous pouvons appliquer certaines requêtes pour obtenir les collections ou l'objet que nous voulons.
Par exemple, IE.Document.GetElementsByTagName("title")(0).innerHtml . GetElementsByTagName renvoie une collection d'éléments HTML ayant la balise " title ". Il n'y a qu'une seule balise dans le code source. La collection est basée sur 0. Donc, pour obtenir le premier élément, nous ajoutons (0) . Maintenant, dans notre cas, nous ne voulons que le innerHtml (une chaîne), pas l'objet Object lui-même. Donc, nous spécifions la propriété que nous voulons.

Cliquez sur

Pour suivre un lien sur un site, nous pouvons utiliser plusieurs méthodes:

Sub IEGoToPlaces()
    Dim IE As InternetExplorer 'Reference to Microsoft Internet Controls
    Set IE = New InternetExplorer
    
    With IE
        .Visible = True
        .Navigate2 "http://www.example.com"
        Stop 'VBE Stop. Continue line by line to see what happens.
        
        'Click
        .Document.GetElementsByTagName("a")(0).Click
        Stop 'VBE Stop.
        
        'Return Back
        .GoBack
        Stop 'VBE Stop.
        
        'Navigate using the href attribute in the <a> tag, or "link"
        .Navigate2 .Document.GetElementsByTagName("a")(0).href
        Stop 'VBE Stop.
        
        .Quit 'close the application window
    End With
End Sub

Microsoft HTML Object Library ou IE Best friend

Pour tirer le meilleur parti du code HTML qui est chargé dans Internet Explorer, vous pouvez (ou devriez) utiliser une autre bibliothèque, par exemple Microsoft HTML Object Library . Plus d'informations à ce sujet dans un autre exemple.

IE Problèmes principaux

Le problème principal avec IE est de vérifier que la page est en cours de chargement et prête à interagir avec. The Do While... Loop aide, mais n'est pas fiable.

En outre, utiliser IE uniquement pour effacer le contenu HTML est OVERKILL. Pourquoi? Parce que le navigateur est conçu pour naviguer, c'est-à-dire afficher la page Web avec tous les CSS, JavaScripts, Images, Popups, etc. Si vous n'avez besoin que des données brutes, envisagez une approche différente. Par exemple, en utilisant XML HTTPRequest . Plus d'informations à ce sujet dans un autre exemple.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow