Поиск…


Вступление

Если вы используете объекты в других приложениях как часть вашего приложения Visual Basic, вам может потребоваться установить ссылку на библиотеки объектов этих приложений. В этой документации представлен список, источники и примеры использования библиотек различных программных продуктов, таких как Windows Shell, Internet Explorer, XML HttpRequest и другие.

Синтаксис

  • expression.CreateObject (Имя_объект)
  • выражение; Необходимые. Выражение, возвращающее объект приложения.
  • ObjectName; Требуемая строка. Имя класса создаваемого объекта. Сведения о допустимых именах классов см. В разделе «Программные идентификаторы OLE».

замечания

Когда приложение поддерживает автоматизацию, объекты, к которым может обратиться приложение, можно получить через Visual Basic. Используйте Visual Basic для управления этими объектами, вызывая методы на объекте или получая и устанавливая свойства объекта.

Если вы используете объекты в других приложениях как часть вашего приложения Visual Basic, вам может потребоваться установить ссылку на библиотеки объектов этих приложений. Прежде чем вы сможете это сделать, сначала убедитесь, что приложение предоставляет библиотеку объектов.

Позволяет выбрать объекты другого приложения, которые вы хотите получить в своем коде, установив ссылку на библиотеку объектов этого приложения.

Создает объект автоматизации указанного класса. Если приложение уже запущено, CreateObject создаст новый экземпляр.

Регулярные выражения VBScript

Set createVBScriptRegExObject = CreateObject("vbscript.RegExp")

Инструменты> Референции> Регулярные выражения Microsoft VBScript #. #
Связанная DLL: VBScript.dll
Источник: Internet Explorer 1.0 и 5.5

Код

Вы можете использовать эти функции для получения результатов RegEx, объединить все совпадения (если больше 1) в 1 строку и отобразить результат в ячейке 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

Скриптовый файловый системный объект

Set createScriptingFileSystemObject = CreateObject("Scripting.FileSystemObject")

Инструменты> Ссылки> Microsoft Scripting Runtime
Связанная DLL: ScrRun.dll
Источник: ОС Windows

MSDN-доступ к файлам с помощью FileSystemObject

Модель File System Object (FSO) предоставляет объектно-ориентированный инструмент для работы с папками и файлами. Он позволяет использовать знакомый синтаксис object.method с богатым набором свойств, методов и событий для обработки папок и файлов. Вы также можете использовать традиционные инструкции и команды Visual Basic.

Модель FSO дает вашему приложению возможность создавать, изменять, перемещать и удалять папки или определять, существуют ли и где существуют определенные папки. Он также позволяет вам получать информацию о папках, таких как их имена и дату их создания или последнего изменения.

Темы MSDN-FileSystemObject : « ... объясните концепцию FileSystemObject и как ее использовать ». Exceltrick-FileSystemObject в VBA - Разъяснение
Scripting.FileSystemObject

Объект словаря сценариев

Set dict = CreateObject("Scripting.Dictionary")

Инструменты> Ссылки> Microsoft Scripting Runtime
Связанная DLL: ScrRun.dll
Источник: ОС Windows

Объект Scripting.Dictionary
Объект MSDN-словаря

Объект Internet Explorer

Set createInternetExplorerObject = CreateObject("InternetExplorer.Application")

Инструменты> Референции> Microsoft Internet Controls
Связанная DLL: ieframe.dll
Источник: браузер Internet Explorer

Объект MSDN-InternetExplorer

Управляет экземпляром Windows Internet Explorer с помощью автоматизации.

Основные пользователи Internet Explorer Objec

В приведенном ниже коде должно быть показано, как работает объект IE и как его можно манипулировать с помощью VBA. Я рекомендую пройти через него, иначе он может ошибиться во время нескольких навигаций.

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

Веб-скребок

Наиболее распространенная проблема с IE заключается в том, чтобы очистить некоторую информацию веб-сайта или заполнить форму веб-сайта и отправить информацию. Мы рассмотрим, как это сделать.

Давайте рассмотрим исходный код 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>

Мы можем использовать код, как показано ниже, чтобы получить и установить информацию:

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

Что здесь происходит? Ключевым игроком здесь является .Document , то есть исходный код HTML. Мы можем применить некоторые запросы для получения Коллекций или Объекта, которые мы хотим.
Например, IE.Document.GetElementsByTagName("title")(0).innerHtml . GetElementsByTagName возвращает коллекцию HTML-элементов, имеющих тег « title ». В исходном коде есть только один тег. Коллекция основана на 0. Итак, чтобы получить первый элемент, добавим (0) . Теперь, в нашем случае, мы хотим только innerHtml (String), а не сам элемент элемента. Поэтому мы указываем требуемое свойство.

Нажмите

Чтобы перейти по ссылке на сайт, мы можем использовать несколько методов:

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 или IE Лучший друг

Чтобы получить максимальную отдачу от HTML, загружаемого в IE, вы можете (или должны) использовать другую Библиотеку, то есть библиотеку объектов Microsoft HTML . Подробнее об этом в другом примере.

Основные проблемы IE

Основная проблема с IE - проверка того, что страница загружена и готова к взаимодействию. Do While... Loop помогает, но не является надежным.

Кроме того, использование IE для очистки содержимого HTML - OVERKILL. Зачем? Поскольку браузер предназначен для просмотра, то есть отображение веб-страницы со всеми CSS, JavaScripts, картинками, всплывающими окнами и т. Д. Если вам нужны только необработанные данные, рассмотрите другой подход. Например, используя XML HTTPRequest . Подробнее об этом в другом примере.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow