«Ошибка компиляции: переменная не была определена» с использованием функции вызова - PullRequest
1 голос
/ 03 июня 2019

У меня есть макрос, который открывает веб-страницу, назначает определенные переменные, а затем вызывает другую процедуру, используя функцию Call.Мне нужно будет использовать некоторые переменные, определенные в первой процедуре (например, numberOfPages) во второй процедуре, но я получаю следующую ошибку:

Ошибка компиляции: переменная не была определена

Может кто-нибудь подскажите, пожалуйста, что это за ошибка и как ее решить?Я подробно ниже обе процедуры.

Sub test()    
    Dim element As IHTMLElement
    Dim elements As IHTMLElementCollection
    Dim ie As InternetExplorer
    Dim numberOfPages As Double
    Dim html As HTMLDocument

    Set ie = New InternetExplorer
    ie.Visible = True
    ie.navigate "https://cebra.com.ar/category/73/Juego-de-Construccion.html"

    Do While ie.readyState <> READYSTATE_COMPLETE
        Application.StatusBar = "Loading Web page …"
        DoEvents
    Loop

    Set html = ie.document
    Set elements = html.getElementsByClassName("container")
    Set ElementCol = html.getElementsByTagName("a")
    numberOfPages = ie.document.querySelectorAll(".setPage").Length

    'MsgBox numberOfPages

    For Each ele In ie.document.getElementsByTagName("li")
        For Each element In elements
            If element.className = "container" Then
                'Do something
                Call procedure
            End If    
        Next element    
    Next
    MsgBox "Done"    
End Sub
Option Explicit

Public Sub procedure()    
    MsgBox numberOfPages

    'I want to use the internet explorer opened and this variable to do something
End Sub

1 Ответ

1 голос
/ 03 июня 2019

Как сказал @Karlomanio, вам нужно передать переменные в вашу подпроцедуру (и не называйте это "процедурой").

Вот ваш код, настроенный так, чтобы numberOfPages работал:

Option Explicit

Public Sub WebProcedure(numberOfPages as Long)

    MsgBox numberOfPages

    'Do something here based on the number of pages

End Sub

Это будет вызвано следующей строкой в ​​вашем test() sub:

WebProcedure numberOfPages

...