Почему мой сценарий VBA ведет себя так непредсказуемо?

Я делаю некоторую автоматизацию IE в скрипте vba, и по какой-то причине

«Set IE = CreateObject («InternetExplorer.Приложение»)»

строка моего кода кажется циклической, потому что иногда она запускает 3-7 браузеров IE вместо одного. Самая неприятная часть заключается в том, что он хорошо работает на моей машине, но когда я отправляю его кому-то другому, он обычно не работает правильно. Вот мой скрипт:

Private Sub LauncherButton_Click()
 'Here an instance of Internet Explorer is created,
 '  and pointed at the login page
 Dim IE As InternetExplorer
 Set IE = CreateObject("InternetExplorer.Application")
 URL = "www.google.com"
 IE.Visible = True
 IE.Navigate URL


 'The script waits for Internet Explorer to finish loading
 Application.Wait Now + TimeValue("00:00:03")

 'Here the login info is taken from the user inputs and entered
 '  login page
 ID = Worksheets("home").Range("B25")
 PW = Worksheets("home").Range("B26")

 Application.SendKeys ID, True
 Application.SendKeys "{TAB}", True
 Application.SendKeys PW, True
 Application.SendKeys "{TAB}", True
 Application.SendKeys "{TAB}", True
 Application.SendKeys "{TAB}", True

 'This command will 'click' the login button, it will remain
 '  commented until a user with access can run the script

 'Application.SendKeys "~", True

 'After the login info is entered it is removed from memory
 Worksheets("home").Range("B25").Clear
 Worksheets("home").Range("B26").Clear
 ID = ""
 PW = ""
End Sub

Я изменил веб-сайт на goggle, так как фактическая цель достижима только в нашей интрасети. Часть sendKeys также не имеет значения, так как страница входа не загружается.

1 ответ

  1. Есть ряд факторов все в игре:

    При запуске функции код VBA остается в среде этой функции. Как я обнаружил сегодня, IE вызывает новое окно после вызова функции навигации. Следовательно, ваш VBA возвратит, что соединение было потеряно.

    Пытаться:

    
     Частный Sub UserForm_Password_AfterUpdate()
     set WebBrowser = новый InternetExplorerMedium
     объект WebBrowser.visible = True
     объект WebBrowser.Навигация по yourLoginPageURL
    
     Пока WebBrowser.Занят = True
     DoEvents
     Wend
    
     объект WebBrowser.Документ.getElementById ("UName").value = листы ("home").Диапазон ("B25") или txtBoxUname.Текст
     объект WebBrowser.Документ.getElementById ("UPwd").value = листы ("home").Диапазон ("B26") или txtBoxPwd.текст
     Рабочие листы("главная").Диапазон ("B25").Очистить
     Рабочие листы("главная").Диапазон ("B26").Очистить
     Конец Sub
    
    
     Частный sub cboAddress_AfterUpdate()
     если cboAddress.Текст > "" тогда
     объект WebBrowser.Выход
     Set WebBrowser = Ничего
     newIE
     Конец Если
     Конец Sub
    
     Частный Sub newIE()
     Set WebBrowser = CreateObject ("InternetExplorer.Приложение")
     С WebBrowser
     дескриптор HWND. = дескриптор HWND
     .Перейдите по адресу cboAddress.Текст
     .Visible = True
     Конец С
    
     Пока WebBrowser.Занятый 
     DoEvents
     Wend
     Конец Sub
    

    Для входа в систему можно использовать const = uName и Const = UPwd.