您必须使用带有类似以下代码的浏览器对象:
.
Set browser = CreateObject("InternetExplorer.Application")
browser.Visible = True
brwser.navigate "http://*.com/..." 'your address
Sleep 1000 'wait for 1 second
With browser.Document
Set txtUsr = .getElementsByName("Username")
Set txtPass = .getElementsByName("UserPass")
Set btnLogin = .getElementById("btnLogin")
End With
txtUsr.innerText = "User Name"
txtPass.innerText = "Password"
btnLogin.Click
.
等等……
.
编辑:我注意到您实际上是在尝试与对话框而不是浏览器页面进行交互。如果是这样,您需要使用 Windows API 函数才能首先从 VBA 中识别它;我建议使用“FindWindow”:
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long
并像这样从 VBA 调用它:
setMyDialog = FindWindow(vbNullString, dialogCaption)
然后发送密钥给它;您可以发送“Tab”键从一个文本框移动到下一个文本框
如果网站使用此对话框允许您选择多个图像,那么自动化将更具挑战性;您必须使用其他录制方法来模拟多个文件选择或鼠标拖放操作
以下是一些有助于 API 功能的链接:
.
编辑您的 3 个问题:
- “我在使用函数时遇到错误。64 位系统的问题...” - 您有 64 位版本的 Excel,因此请替换此声明
.
Private Declare Function FindWindow Lib "User32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String _
) As Long
用这个:
Private Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String
) As LongPtr
.
- “当我复制函数时,VBA 说只有 cmets 可能出现在 End Sub...”之后。
这是一个声明,所以它必须放在模块的顶部(在任何其他函数之前)
- 我应该写什么来代替“vbNullString”和“dialogCaption”??
您仍然可以使用“vbNullString”作为第一个参数,但您必须将“dialogCaption”替换为对话框的标题
-
不要为 vbNullString 使用引号
-
请在对话框标题中使用引号