Szukaj…


Wprowadzenie

Jeśli używasz obiektów w innych aplikacjach jako części aplikacji Visual Basic, możesz chcieć ustanowić odwołanie do bibliotek obiektów tych aplikacji. Ta dokumentacja zawiera listę, źródła i przykłady korzystania z bibliotek różnych programów, takich jak Windows Shell, Internet Explorer, XML HttpRequest i inne.

Składnia

  • expression.CreateObject (ObjectName)
  • wyrażenie; Wymagany. Wyrażenie zwracające obiekt Application.
  • Nazwa_obiektu; Wymagany ciąg. Nazwa klasy obiektu do utworzenia. Aby uzyskać informacje o prawidłowych nazwach klas, zobacz Identyfikatory programowe OLE.

Uwagi

Gdy aplikacja obsługuje automatyzację, do obiektów, które eksponuje, można uzyskać dostęp za pomocą Visual Basic. Używaj Visual Basic do manipulowania tymi obiektami poprzez wywoływanie metod na obiekcie lub uzyskiwanie i ustawianie właściwości obiektu.

Jeśli używasz obiektów w innych aplikacjach jako części aplikacji Visual Basic, możesz chcieć ustanowić odwołanie do bibliotek obiektów tych aplikacji. Aby to zrobić, musisz najpierw upewnić się, że aplikacja udostępnia bibliotekę obiektów.

Umożliwia wybranie obiektów innej aplikacji, które mają być dostępne w kodzie, poprzez ustawienie odwołania do biblioteki obiektów tej aplikacji.

Tworzy obiekt automatyzacji określonej klasy. Jeśli aplikacja już działa, CreateObject utworzy nową instancję.

Wyrażenia regularne VBScript

Set createVBScriptRegExObject = CreateObject("vbscript.RegExp")

Narzędzia> Referencje> Wyrażenia regularne Microsoft VBScript #. #
Skojarzona biblioteka DLL: VBScript.dll
Źródło: Internet Explorer 1.0 i 5.5

Kod

Możesz użyć tej funkcji, aby uzyskać wyniki RegEx, połączyć wszystkie dopasowania (jeśli więcej niż 1) w 1 łańcuch i wyświetlić wynik w komórce programu 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

Obiekt systemu plików skryptów

Set createScriptingFileSystemObject = CreateObject("Scripting.FileSystemObject")

Narzędzia> Referencje> Środowisko wykonawcze skryptów Microsoft
Skojarzona biblioteka DLL: ScrRun.dll
Źródło: system operacyjny Windows

MSDN-Accessing Files with FileSystemObject

Model File System Object (FSO) zapewnia narzędzie obiektowe do pracy z folderami i plikami. Pozwala używać znanej składni object.method z bogatym zestawem właściwości, metod i zdarzeń do przetwarzania folderów i plików. Możesz także zastosować tradycyjne instrukcje i polecenia języka Visual Basic.

Model FSO umożliwia aplikacji tworzenie, modyfikowanie, przenoszenie i usuwanie folderów lub ustalanie, czy i gdzie istnieją określone foldery. Umożliwia także uzyskiwanie informacji o folderach, takich jak ich nazwy i data ich utworzenia lub ostatniej modyfikacji.

Tematy MSDN-FileSystemObject : „ ... wyjaśnić koncepcję FileSystemObject i jak z niej korzystać.Exceltrick-FileSystemObject w VBA - wyjaśnione
Scripting.FileSystemObject

Obiekt Scripting Dictionary

Set dict = CreateObject("Scripting.Dictionary")

Narzędzia> Referencje> Środowisko wykonawcze skryptów Microsoft
Skojarzona biblioteka DLL: ScrRun.dll
Źródło: system operacyjny Windows

Obiekt Scripting.Dictionary
Obiekt MSDN-Dictionary

Obiekt Internet Explorer

Set createInternetExplorerObject = CreateObject("InternetExplorer.Application")

Narzędzia> Referencje> Kontrolki internetowe Microsoft
Skojarzona biblioteka DLL: ieframe.dll
Źródło: przeglądarka Internet Explorer

Obiekt MSDN-InternetExplorer

Kontroluje wystąpienie programu Windows Internet Explorer poprzez automatyzację.

Podstawowi członkowie programu Internet Explorer Objec

Poniższy kod powinien przedstawić, jak działa obiekt IE i jak nim manipulować za pomocą VBA. Zalecam przejście przez to, w przeciwnym razie może wystąpić błąd podczas wielu nawigacji.

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

Skrobanie stron internetowych

Najczęstszą rzeczą związaną z IE jest zeskrobanie niektórych informacji na stronie internetowej lub wypełnienie formularza strony i przesłanie informacji. Zobaczymy, jak to zrobić.

Rozważmy kod źródłowy 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>

Możemy użyć kodu jak poniżej, aby uzyskać i ustawić informacje:

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

Co się dzieje? Kluczowym graczem jest tutaj .Document , czyli kod źródłowy HTML. Możemy zastosować pewne zapytania, aby uzyskać pożądane Kolekcje lub Obiekt.
Na przykład IE.Document.GetElementsByTagName("title")(0).innerHtml . GetElementsByTagName zwraca kolekcję elementów HTML, które mają znacznik „ title ”. W kodzie źródłowym jest tylko jeden taki znacznik. Kolekcja oparta jest na 0. Aby uzyskać pierwszy element, dodajemy (0) . Teraz w naszym przypadku chcemy tylko innerHtml (ciąg innerHtml ), a nie sam obiekt elementu. Określamy więc pożądaną właściwość.

Kliknij

Aby skorzystać z linku na stronie, możemy użyć wielu metod:

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 lub IE Best friend

Aby maksymalnie wykorzystać kod HTML ładowany do IE, możesz (lub powinieneś) skorzystać z innej biblioteki, np. Microsoft HTML Object Library . Więcej na ten temat w innym przykładzie.

IE Główne problemy

Głównym problemem w IE jest sprawdzenie, czy strona została załadowana i jest gotowa do interakcji. Do While... Loop pomaga, ale nie jest niezawodna.

Również używanie IE tylko do zeskrobywania treści HTML jest OVERKILL. Dlaczego? Ponieważ przeglądarka jest przeznaczona do przeglądania, tj. Wyświetlania strony internetowej ze wszystkimi CSS, JavaScript, obrazkami, wyskakującymi oknami itp. Jeśli potrzebujesz tylko surowych danych, rozważ inne podejście. Np. Używając XML HTTPRequest . Więcej na ten temat w innym przykładzie.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow