从早期绑定转换为后期绑定
Converting From Early Binding to Late Binding
更新#2
我用 (0)
更改了 txtbox 和 submitbtns 的值(也尝试了 (1)
),没有任何变化。
我还需要注意按钮有一个不同的名称,我在这里也进行了相应的更新。
Dim TBox As String 'Name of object textbox to have value changed in
Dim TBtn As String 'Name of object button to be pressed
TBox = "masked1"
TBtn = "button"
If Not IE Is Nothing Then
Set txtBox = IE.Document.getElementsByClassName(TBox)(0)
Set submitBtn = IE.Document.getElementsByClassName(TBtn)(0)
txtBox.Value = tVal
submitBtn.Click
End If
更新#1
所以,根据@cyboashu 提供的建议,事情看起来很有希望。但是,我仍然无法让我的文本框更新为 value = tVal
(字符串)。
Dim oShell As Object
Dim oWin As Object
Dim IE As Object
Dim lTotlWin As Long
Dim lCtr
Debug.Print Time & " --- IE Objects & Values ---" ' Debugger Section
Set oShell = CreateObject("Shell.Application")
Debug.Print Time & " [obj ] oShell..: " & oShell ' Debug oShell
Set oWin = oShell.Windows()
Debug.Print Time & " [obj ] oWin....: " & oWin ' Debug oWin
lTotlWin = oWin.Count - 1 '/ Starts with zero
Debug.Print Time & " [long] lTotlWin: " & lTotlWin ' Debug lTotlWin
For lCtr = 0 To lTotlWin
If UCase(oWin.Item(lCtr).FullName) Like "*IEXPLORE.EXE" Then
Set IE = oWin.Item(lCtr)
End If
Next
Debug.Print Time & " [obj ] IE......: " & IE
If Not IE Is Nothing Then
MsgBox "Found and hooked!!"
End If
Dim TBox As String 'In the event the textbox's name changes for some reason
TBox = "masked1"
If Not IE Is Nothing Then
Set txtBox = IE.Document.getElementsByClassName(TBox)
Debug.Print Time & " [obj ] txtbox..: " & txtbox
Set submitBtn = IE.Document.getElementsByClassName(TBox)
Debug.Print Time & " [obj ] submitBtn:" & submitBtn
txtBox.Value = tVal
submitBtn.Click
End If
Set shellwins = Nothing
Debug.Print Time & "- - - END SUB - - -" & E
结束子
(调试器值,如果有人关心的话)..
2:44:11 PM --- IE Objects & Values ---
2:44:11 PM [long] lTotlWin: 5
2:44:11 PM [obj ] IE......: Internet Explorer
2:44:11 PM - - - END SUB - - -
获取对象在这里不起作用。
MS 对此的评价:https://support.microsoft.com/en-gb/kb/239470
Calling GetObject to get a running ActiveX object on a client system
would be a large security risk because any running object on the
system could be accessed without direct user permission, and is
therefore not allowed by Internet Explorer. There is no way to change
this behavior, either through code or manually by an end user.
试试这个:
Sub testIELateBinding()
Dim oShell As Object
Dim oWin As Object
Dim IE As Object
Dim lTotlWin As Long
Dim lCtr
Set oShell = CreateObject("Shell.Application")
Set oWin = oShell.Windows()
lTotlWin = oWin.Count - 1 '/ Starts with zero
For lCtr = 0 To lTotlWin
If UCase(oWin.Item(lCtr).FullName) Like "*IEXPLORE.EXE" Then
Set IE = oWin.Item(lCtr)
End If
Next
If Not IE Is Nothing Then
MsgBox "Found and hooked!!"
End If
End Sub
更新#2
我用 (0)
更改了 txtbox 和 submitbtns 的值(也尝试了 (1)
),没有任何变化。
我还需要注意按钮有一个不同的名称,我在这里也进行了相应的更新。
Dim TBox As String 'Name of object textbox to have value changed in
Dim TBtn As String 'Name of object button to be pressed
TBox = "masked1"
TBtn = "button"
If Not IE Is Nothing Then
Set txtBox = IE.Document.getElementsByClassName(TBox)(0)
Set submitBtn = IE.Document.getElementsByClassName(TBtn)(0)
txtBox.Value = tVal
submitBtn.Click
End If
更新#1
所以,根据@cyboashu 提供的建议,事情看起来很有希望。但是,我仍然无法让我的文本框更新为 value = tVal
(字符串)。
Dim oShell As Object
Dim oWin As Object
Dim IE As Object
Dim lTotlWin As Long
Dim lCtr
Debug.Print Time & " --- IE Objects & Values ---" ' Debugger Section
Set oShell = CreateObject("Shell.Application")
Debug.Print Time & " [obj ] oShell..: " & oShell ' Debug oShell
Set oWin = oShell.Windows()
Debug.Print Time & " [obj ] oWin....: " & oWin ' Debug oWin
lTotlWin = oWin.Count - 1 '/ Starts with zero
Debug.Print Time & " [long] lTotlWin: " & lTotlWin ' Debug lTotlWin
For lCtr = 0 To lTotlWin
If UCase(oWin.Item(lCtr).FullName) Like "*IEXPLORE.EXE" Then
Set IE = oWin.Item(lCtr)
End If
Next
Debug.Print Time & " [obj ] IE......: " & IE
If Not IE Is Nothing Then
MsgBox "Found and hooked!!"
End If
Dim TBox As String 'In the event the textbox's name changes for some reason
TBox = "masked1"
If Not IE Is Nothing Then
Set txtBox = IE.Document.getElementsByClassName(TBox)
Debug.Print Time & " [obj ] txtbox..: " & txtbox
Set submitBtn = IE.Document.getElementsByClassName(TBox)
Debug.Print Time & " [obj ] submitBtn:" & submitBtn
txtBox.Value = tVal
submitBtn.Click
End If
Set shellwins = Nothing
Debug.Print Time & "- - - END SUB - - -" & E
结束子
(调试器值,如果有人关心的话)..
2:44:11 PM --- IE Objects & Values ---
2:44:11 PM [long] lTotlWin: 5
2:44:11 PM [obj ] IE......: Internet Explorer
2:44:11 PM - - - END SUB - - -
获取对象在这里不起作用。
MS 对此的评价:https://support.microsoft.com/en-gb/kb/239470
Calling GetObject to get a running ActiveX object on a client system would be a large security risk because any running object on the system could be accessed without direct user permission, and is therefore not allowed by Internet Explorer. There is no way to change this behavior, either through code or manually by an end user.
试试这个:
Sub testIELateBinding()
Dim oShell As Object
Dim oWin As Object
Dim IE As Object
Dim lTotlWin As Long
Dim lCtr
Set oShell = CreateObject("Shell.Application")
Set oWin = oShell.Windows()
lTotlWin = oWin.Count - 1 '/ Starts with zero
For lCtr = 0 To lTotlWin
If UCase(oWin.Item(lCtr).FullName) Like "*IEXPLORE.EXE" Then
Set IE = oWin.Item(lCtr)
End If
Next
If Not IE Is Nothing Then
MsgBox "Found and hooked!!"
End If
End Sub