На основе вашего кода я создал образец с использованием следующего кода, он хорошо работает на моей стороне, вы также можете проверить его.
Function IEWindowFromTitle(sTitle As String) As SHDocVw.InternetExplorer
Dim objShellWindows As New SHDocVw.ShellWindows
Dim win As Object, rv As SHDocVw.InternetExplorer
For Each win In objShellWindows
If TypeName(win.Document) = "HTMLDocument" Then
If UCase(win.Document.Title) = UCase(sTitle) Then
Set rv = win
Exit For
End If
End If
Next
Set IEWindowFromTitle = rv
End Function
Sub Test1()
'Login into IE
Dim IE As Object
Dim IE1 As Object
Dim doc As HTMLDocument
Dim btn As HTMLButtonElement
Dim MyHTML_Element As IHTMLElement
Dim MyHTML_Element1 As IHTMLElement
Set IE = CreateObject("InternetExplorer.Application")
Set IE1 = CreateObject("InternetExplorer.Application")
IE.Visible = True
IE.Navigate "https://www.google.com/"
Do While IE.Busy
'ShowWindow IE.Hwnd, 3
Application.Wait DateAdd("s", 1, Now)
Loop
Set doc = IE.Document
'Click to Login
Do While IE.Busy
'ShowWindow IE.Hwnd, 3
Application.Wait DateAdd("s", 1, Now)
Loop
Do While IE.Busy
' ShowWindow IE.HWND, 3
Application.Wait DateAdd("s", 1, Now)
'Set page to be fully loaded
Loop
Do While IE.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
IE1.Visible = True
IE1.Navigate "https://www.bing.com/"
Do While IE1.Busy
'ShowWindow IE1.Hwnd, 3
Application.Wait DateAdd("s", 1, Now)
Loop
Do While IE1.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
IE1.Document.getElementById("sb_form_q").Value = "vba"
IE1.Document.getElementById("sb_form_go").Click
End Sub
Поскольку я не могу воспроизвести вашу проблему, Я предлагаю вам обратиться к следующим шагам, чтобы сузить проблему и попытаться ее решить.
IE1.Visible = True
IE1.navigate "https://some_intranet_url/2"
Do While IE1.Busy
ShowWindow IE1.HWND, 3
Application.Wait DateAdd("s", 1, Now)
Loop
Do While IE.readyState <> READYSTATE_COMPLETE
DoEvents
Loop
**IE1.document.getElementById("btnAddPerson").Click**
Сначала, пожалуйста, проверьте приведенный выше код, после перехода на другую страницу, мы должны подождать " IE1 "экземпляр завершен, вместо" IE "экземпляр. Пожалуйста, попробуйте изменить код, как показано ниже:
IE1.Visible = True
IE1.Navigate "https://www.bing.com/"
Do While IE1.Busy
'ShowWindow IE1.Hwnd, 3
Application.Wait DateAdd("s", 1, Now)
Loop
Do While IE1.ReadyState <> READYSTATE_COMPLETE
DoEvents
Loop
Во-вторых, после успешной навигации, пожалуйста, проверьте окно фокуса и используйте инструменты разработчика F12, чтобы проверить ресурс сайта, убедитесь, что вы можете найти кнопку "btnAddPerson" .
Кроме того, вот статья об ошибке VBA 91, на которую можно ссылаться:
Переменная объекта не установлена (Ошибка 91)