VBA
Automatisation ou utilisation d'autres bibliothèques
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
- MSDN-Microsoft enrichit VBScript avec des expressions régulières
- Syntaxe des expressions MSDN-Regular (Scripting)
- experts-exchange - Utilisation d'expressions régulières dans Visual Basic pour Applications et Visual Basic 6
- Comment utiliser les expressions régulières (Regex) dans Microsoft Excel à la fois dans la cellule et les boucles sur SO.
- regular-expressions.info/vbscript
- regular-expressions.info/vbscriptexample
- WIKI-Expression régulière
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
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.