Sök…


Introduktion

Om du använder objekten i andra applikationer som en del av din Visual Basic-applikation, kanske du vill skapa en referens till objektbiblioteken för dessa applikationer. Denna dokumentation innehåller en lista, källor och exempel på hur man använder bibliotek med olika programvara, som Windows Shell, Internet Explorer, XML HttpRequest och andra.

Syntax

  • expression.CreateObject (Object)
  • uttryck; Nödvändig. Ett uttryck som returnerar ett applikationsobjekt.
  • Object; Obligatorisk sträng. Klassnamnet på objektet som ska skapas. För information om giltiga klassnamn, se OLE Programmatic Identifier.

Anmärkningar

När en applikation stöder automatisering kan de objekt som applikationen exponerar nås av Visual Basic. Använd Visual Basic för att manipulera dessa objekt genom att åberopa metoder på objektet eller genom att få och ställa in objektets egenskaper.

Om du använder objekten i andra applikationer som en del av din Visual Basic-applikation, kanske du vill skapa en referens till objektbiblioteken för dessa applikationer. Innan du kan göra det måste du först vara säker på att applikationen tillhandahåller ett objektbibliotek.

Gör att du kan välja ett annat applikations objekt som du vill ha tillgängligt i din kod genom att ange en referens till applikationens objektbibliotek.

Skapar ett automatiseringsobjekt för den angivna klassen. Om applikationen redan körs kommer CreateObject att skapa en ny instans.

VBScript Regular Expressions

Set createVBScriptRegExObject = CreateObject("vbscript.RegExp")

Verktyg> Referenser> Microsoft VBScript Regular Expressions #. #
Tillhörande DLL: VBScript.dll
Källa: Internet Explorer 1.0 och 5.5

Koda

Du kan använda dessa funktioner för att få RegEx-resultat, sammanfoga alla matchningar (om fler än 1) i en sträng och visa resultat i excelcell.

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

Skriptfilsystemobjekt

Set createScriptingFileSystemObject = CreateObject("Scripting.FileSystemObject")

Verktyg> Referenser> Microsoft Scripting Runtime
Tillhörande DLL: ScrRun.dll
Källa: Windows OS

MSDN-åtkomst till filer med FileSystemObject

FSO-modellen (File System Object) tillhandahåller ett objektbaserat verktyg för att arbeta med mappar och filer. Det låter dig använda det bekanta syntetxet object.method med en rik uppsättning egenskaper, metoder och händelser för att bearbeta mappar och filer. Du kan också använda de traditionella Visual Basic-uttalandena och kommandona.

FSO-modellen ger din applikation möjlighet att skapa, ändra, flytta och radera mappar eller bestämma om och var specifika mappar finns. Det ger dig också möjlighet att få information om mappar, till exempel deras namn och datum då de skapades eller senast ändrades.

MSDN-FileSystemObject-ämnen : " ... förklara konceptet för FileSystemObject och hur man använder det. " Exceltrick-FileSystemObject i VBA - Förklarat
Scripting.FileSystemObject

Skriptordbokobjekt

Set dict = CreateObject("Scripting.Dictionary")

Verktyg> Referenser> Microsoft Scripting Runtime
Tillhörande DLL: ScrRun.dll
Källa: Windows OS

Scripting.Diction-objekt
MSDN-Dictionary Object

Internet Explorer-objekt

Set createInternetExplorerObject = CreateObject("InternetExplorer.Application")

Verktyg> Referenser> Microsoft Internet-kontroller
Tillhörande DLL: ieframe.dll
Källa: Internet Explorer Browser

MSDN-InternetExplorer-objekt

Kontrollerar en instans av Windows Internet Explorer genom automatisering.

Internet Explorer Objec Basic Members

Koden nedan bör introducera hur IE-objektet fungerar och hur man manipulerar det genom VBA. Jag rekommenderar att du går igenom det, annars kan det göra fel under flera navigeringar.

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

Webskrapning

Det vanligaste att göra med IE är att skrapa viss information på en webbplats eller att fylla i ett webbplatsformulär och skicka in information. Vi ska titta på hur vi gör det.

Låt oss överväga exempel.com källkod:

<!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>

Vi kan använda kod som nedan för att få och ställa in information:

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

Vad händer? Den viktigaste spelaren här är. Dokumentet , det är HTML-källkoden. Vi kan tillämpa några frågor för att få de samlingar eller objekt vi vill ha.
Till exempel IE.Document.GetElementsByTagName("title")(0).innerHtml . GetElementsByTagName returnerar en samling HTML-element som har taggen " title ". Det finns bara en sådan tagg i källkoden. Samlingen är 0-baserad. Så för att få det första elementet lägger vi till (0) . I vårt fall vill vi bara ha innerHtml (en sträng), inte själva elementobjektet. Så vi specificerar den egendom vi vill ha.

Klick

För att följa en länk på en webbplats kan vi använda flera metoder:

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 eller IE Bästa vän

För att få ut det mesta av HTML-koden som laddas in i IE kan du (eller borde) använda ett annat bibliotek, dvs. Microsoft HTML Object Library . Mer om detta i ett annat exempel.

IE Huvudfrågor

Huvudproblemet med IE är att verifiera att sidan laddas och är redo att interagera med. The Do While... Loop hjälper, men är inte pålitlig.

Att använda IE bara för att skrapa HTML-innehåll är OVERKILL. Varför? Eftersom webbläsaren är avsedd för surfning, dvs att visa webbsidan med alla CSS, JavaScripts, Pictures, Popups, etc. Om du bara behöver rådata, överväg olika tillvägagångssätt. Använd t.ex. XML HTTPRequest . Mer om detta i ett annat exempel.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow