Suche…


Einführung

Wenn Sie die Objekte in anderen Anwendungen als Teil Ihrer Visual Basic-Anwendung verwenden, möchten Sie möglicherweise einen Verweis auf die Objektbibliotheken dieser Anwendungen einrichten. Diese Dokumentation enthält eine Liste, Quellen und Beispiele für die Verwendung von Bibliotheken verschiedener Software, z. B. Windows Shell, Internet Explorer, XML HttpRequest und andere.

Syntax

  • expression.CreateObject (ObjectName)
  • Ausdruck; Erforderlich. Ein Ausdruck, der ein Anwendungsobjekt zurückgibt.
  • Objektname; Erforderliche Zeichenfolge Der Klassenname des zu erstellenden Objekts. Informationen zu gültigen Klassennamen finden Sie unter Programmierbare OLE-Bezeichner.

Bemerkungen

Wenn eine Anwendung die Automatisierung unterstützt, kann auf die von der Anwendung bereitgestellten Objekte von Visual Basic zugegriffen werden. Verwenden Sie Visual Basic, um diese Objekte zu bearbeiten, indem Sie Methoden für das Objekt aufrufen oder die Eigenschaften des Objekts abrufen und festlegen.

Wenn Sie die Objekte in anderen Anwendungen als Teil Ihrer Visual Basic-Anwendung verwenden, möchten Sie möglicherweise einen Verweis auf die Objektbibliotheken dieser Anwendungen einrichten. Bevor Sie dies tun können, müssen Sie zunächst sicherstellen, dass die Anwendung eine Objektbibliothek bereitstellt.

Ermöglicht das Auswählen von Objekten einer anderen Anwendung, die in Ihrem Code verfügbar sein sollen, indem Sie einen Verweis auf die Objektbibliothek dieser Anwendung festlegen.

Erstellt ein Automatisierungsobjekt der angegebenen Klasse. Wenn die Anwendung bereits läuft, erstellt CreateObject eine neue Instanz.

VBScript-reguläre Ausdrücke

Set createVBScriptRegExObject = CreateObject("vbscript.RegExp")

Tools> Referenzen> Regelmäßige Microsoft VBScript-Ausdrücke #. #
Zugehörige DLL: VBScript.dll
Quelle: Internet Explorer 1.0 und 5.5

Code

Sie können diese Funktionen verwenden, um RegEx-Ergebnisse zu erhalten, alle Übereinstimmungen (wenn mehr als 1) in einer Zeichenfolge zu verketten und das Ergebnis in einer Excel-Zelle anzuzeigen.

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

Skript-Dateisystemobjekt

Set createScriptingFileSystemObject = CreateObject("Scripting.FileSystemObject")

Extras> Referenzen> Microsoft Scripting Runtime
Zugehörige DLL: ScrRun.dll
Quelle: Windows-Betriebssystem

MSDN-Zugriff auf Dateien mit FileSystemObject

Das Dateisystemobjektmodell (FSO) bietet ein objektbasiertes Werkzeug zum Arbeiten mit Ordnern und Dateien. Es ermöglicht Ihnen die Verwendung der bekannten object.method-Syntax mit einem umfangreichen Satz von Eigenschaften, Methoden und Ereignissen zum Verarbeiten von Ordnern und Dateien. Sie können auch die herkömmlichen Visual Basic-Anweisungen und -Befehle verwenden.

Mit dem FSO-Modell können Sie mit Ihrer Anwendung Ordner erstellen, ändern, verschieben und löschen oder feststellen, ob und wo bestimmte Ordner vorhanden sind. Außerdem können Sie Informationen zu Ordnern abrufen, z. B. deren Namen und das Datum, an dem sie erstellt oder zuletzt geändert wurden.

MSDN-Filesystem Themen : „... erklären das Konzept des Filesystem und wie es zu benutzen.“ Exceltrick-Filesystem in VBA - Erklärte
Scripting.FileSystemObject

Scripting Dictionary-Objekt

Set dict = CreateObject("Scripting.Dictionary")

Extras> Referenzen> Microsoft Scripting Runtime
Zugehörige DLL: ScrRun.dll
Quelle: Windows-Betriebssystem

Scripting.Dictionary-Objekt
MSDN-Dictionary-Objekt

Internet Explorer-Objekt

Set createInternetExplorerObject = CreateObject("InternetExplorer.Application")

Extras> Referenzen> Microsoft Internet Controls
Zugehörige DLL: ieframe.dll
Quelle: Internet Explorer-Browser

MSDN-InternetExplorer-Objekt

Steuert eine Instanz von Windows Internet Explorer durch Automatisierung.

Grundlegende Mitglieder des Internet Explorer-Objekts

Der folgende Code sollte einführen, wie das IE-Objekt funktioniert und wie es über VBA bearbeitet wird. Ich empfehle einen Schritt durch, andernfalls kann es bei mehreren Navigationen zu Fehlern kommen.

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

Die häufigste Sache, die mit IE zu tun ist, ist, einige Informationen einer Website zu kratzen oder ein Website-Formular auszufüllen und Informationen zu übermitteln. Wir werden sehen, wie es geht.

Betrachten wir den Quellcode von 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>

Wir können Code wie unten verwenden, um Informationen zu erhalten und einzustellen:

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

Was ist los? Der Schlüsselspieler ist hier das .Document , also der HTML-Quellcode. Wir können einige Abfragen durchführen, um die gewünschten Sammlungen oder Objekte zu erhalten.
Zum Beispiel IE.Document.GetElementsByTagName("title")(0).innerHtml . GetElementsByTagName gibt eine Sammlung von HTML - Elemente, die den „Titel“ Tag haben. Es gibt nur einen solchen Tag im Quellcode. Die Collection basiert auf 0. Um das erste Element zu erhalten, fügen wir (0) . In unserem Fall wollen wir nur die innerHtml (ein String), nicht das Element-Objekt selbst. Wir geben also die gewünschte Eigenschaft an.

Klicken

Um einem Link auf einer Site zu folgen, können wir mehrere Methoden verwenden:

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 oder IE Bester Freund

Um den in den IE geladenen HTML-Code optimal zu nutzen, können (oder sollten) Sie eine andere Bibliothek verwenden, z. B. die Microsoft HTML Object Library . Mehr dazu in einem anderen Beispiel.

IE Hauptprobleme

Das Hauptproblem bei IE besteht darin, zu überprüfen, ob die Seite vollständig geladen wurde und bereit ist, mit ihr zu interagieren. Die Do While... Loop hilft, ist aber nicht zuverlässig.

Die Verwendung von IE nur zum Abkratzen von HTML-Inhalten ist OVERKILL. Warum? Da der Browser zum Browsen gedacht ist, dh die Webseite mit allen CSS, JavaScripts, Bildern, Popups usw. anzeigen soll. Wenn Sie nur die Rohdaten benötigen, sollten Sie einen anderen Ansatz verwenden. ZB mit XML HTTPRequest . Mehr dazu in einem anderen Beispiel.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow