Ricerca…


introduzione

Se si utilizzano gli oggetti in altre applicazioni come parte dell'applicazione Visual Basic, è possibile che si desideri stabilire un riferimento alle librerie di oggetti di tali applicazioni. Questa documentazione fornisce un elenco, fonti ed esempi su come utilizzare le librerie di diversi software, come Windows Shell, Internet Explorer, XML HttpRequest e altri.

Sintassi

  • expression.CreateObject (ObjectName)
  • espressione; Necessario. Un'espressione che restituisce un oggetto Application.
  • ObjectName; Stringa richiesta. Il nome della classe dell'oggetto da creare. Per informazioni sui nomi di classi validi, vedere Identificatori programmatici OLE.

Osservazioni

Quando un'applicazione supporta l'automazione, gli oggetti a cui espone l'applicazione sono accessibili da Visual Basic. Utilizzare Visual Basic per manipolare questi oggetti richiamando metodi sull'oggetto o ottenendo e impostando le proprietà dell'oggetto.

Se si utilizzano gli oggetti in altre applicazioni come parte dell'applicazione Visual Basic, è possibile che si desideri stabilire un riferimento alle librerie di oggetti di tali applicazioni. Prima di poterlo fare, devi prima essere sicuro che l'applicazione fornisca una libreria di oggetti.

Consente di selezionare gli oggetti di un'altra applicazione che si desidera rendere disponibili nel codice impostando un riferimento alla libreria di oggetti dell'applicazione.

Crea un oggetto di automazione della classe specificata. Se l'applicazione è già in esecuzione, CreateObject creerà una nuova istanza.

VBScript Regular Expressions

Set createVBScriptRegExObject = CreateObject("vbscript.RegExp")

Strumenti> Riferimenti> Microsoft VBScript Regular Expressions #. #
DLL associata: VBScript.dll
Fonte: Internet Explorer 1.0 e 5.5

Codice

È possibile utilizzare queste funzioni per ottenere risultati RegEx, concatenare tutte le corrispondenze (se più di 1) in 1 stringa e visualizzare i risultati nella cella 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

Scripting File System Object

Set createScriptingFileSystemObject = CreateObject("Scripting.FileSystemObject")

Strumenti> Riferimenti> Runtime di Microsoft Scripting
DLL associata: ScrRun.dll
Fonte: sistema operativo Windows

MSDN-Accesso ai file con FileSystemObject

Il modello File System Object (FSO) fornisce uno strumento basato su oggetti per lavorare con cartelle e file. Consente di utilizzare la nota sintassi object.method con un ricco set di proprietà, metodi ed eventi per elaborare cartelle e file. È anche possibile utilizzare le istruzioni e i comandi Visual Basic tradizionali.

Il modello FSO offre alla tua applicazione la possibilità di creare, modificare, spostare ed eliminare cartelle o per determinare se e dove esistono cartelle particolari. Consente inoltre di ottenere informazioni sulle cartelle, come i loro nomi e la data in cui sono state create o modificate per ultime.

Argomenti MSDN-FileSystemObject : " ... spiega il concetto di FileSystemObject e come usarlo. " Exceltrick-FileSystemObject in VBA - Explained
Scripting.FileSystemObject

Oggetto del dizionario di scripting

Set dict = CreateObject("Scripting.Dictionary")

Strumenti> Riferimenti> Runtime di Microsoft Scripting
DLL associata: ScrRun.dll
Fonte: sistema operativo Windows

Scripting. Oggetto letterario
MSDN-Dictionary Object

Internet Explorer Object

Set createInternetExplorerObject = CreateObject("InternetExplorer.Application")

Strumenti> Riferimenti> Microsoft Internet Controls
DLL associata: ieframe.dll
Fonte: browser Internet Explorer

Oggetto MSDN-InternetExplorer

Controlla un'istanza di Windows Internet Explorer tramite l'automazione.

Internet Explorer Objec Basic Members

Il codice seguente dovrebbe illustrare come funziona l'oggetto IE e come manipolarlo tramite VBA. Vi consiglio di superarlo, altrimenti potrebbe verificarsi un errore durante più navigazioni.

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

Raschiatura del web

La cosa più comune da fare con IE è di carpire alcune informazioni di un sito Web, o compilare un modulo di sito Web e inviare informazioni. Vedremo come farlo.

Prendiamo in considerazione il codice sorgente di esempio.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>

Possiamo usare il codice come sotto per ottenere e impostare le informazioni:

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

Cosa sta succedendo? Il giocatore chiave qui è il documento . Questo è il codice sorgente HTML. Possiamo applicare alcune query per ottenere le collezioni o l'oggetto che vogliamo.
Ad esempio, IE.Document.GetElementsByTagName("title")(0).innerHtml . GetElementsByTagName restituisce una raccolta di elementi HTML, che hanno il tag " title ". C'è solo un tag di questo tipo nel codice sorgente. La raccolta è basata su 0. Quindi per ottenere il primo elemento aggiungiamo (0) . Ora, nel nostro caso, vogliamo solo innerHtml (a String), non l'Oggetto Element stesso. Quindi specifichiamo la proprietà che vogliamo.

Clic

Per seguire un collegamento su un sito, possiamo utilizzare più metodi:

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 o IE Migliore amico

Per ottenere il massimo dall'HTML che viene caricato nell'IE, è possibile (o dovrebbe) utilizzare un'altra libreria, ad es. Microsoft HTML Object Library . Maggiori informazioni su questo in un altro esempio.

IE principali problemi

Il problema principale con IE è verificare che la pagina sia stata caricata ed è pronta per essere interagita con. Il Do While... Loop aiuta, ma non è affidabile.

Inoltre, usare IE solo per raschiare il contenuto HTML è OVERKILL. Perché? Poiché il browser è pensato per la navigazione, ovvero la visualizzazione della pagina Web con tutti i CSS, JavaScript, immagini, popup, ecc. Se sono necessari solo i dati grezzi, prendere in considerazione un approccio diverso. Ad esempio, usando XML HTTPRequest . Maggiori informazioni su questo in un altro esempio.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow