我正在尝试构建一个简单的宏,它允许用户从Excel工作表中选择所需的行并将其导出到Web服务。宏应该能够使用用户名和密码对用户进行身份验证,以确保他有权上传数据。当用户选择所需行时,IE将打开Web服务的身份验证页面。我正在尝试在用户成功登录到Web服务以验证凭据时捕获URL更改。
有更好的方法来验证用户吗?我决定使用网站主登录页面进行身份验证,因为我不想通过脚本发送用户名和密码。
以下是我的代码的样子:
Call NavigateToURL(--url of login page--)
Public Sub NavigateToURL(ByVal argURL As String)
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True
.Silent = True
.Navigate argURL
Do Until objIE.LocationURL() = (--url after successfull log in--)
DoEvents
Loop
If n = (---url after successful log in--) Then
objIE.Navigate (--redirect to another url)
Else
MsgBox ("Sorry. Authentication Failed.")
End If
但Do-Until循环后的部分无法正常工作。任何人都可以指出我出错的地方吗?
答案 0 :(得分:0)
我认为更简单的做法是通过InputBox
(或自定义用户表单,如果你想让它变得更加漂亮)来获取用户名和密码。这就是这个想法:
Public Sub Main()
'get username and password through input boxes
username = InputBox("Type your username")
password = InputBox("Type your password")
NavigateToUrl(argURL, username, password)
End Sub
Public Sub NavigateToURL(ByVal argURL As String, ByVal username As String, ByVal password As String)
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True
.Silent = True
.Navigate argURL
Do While .Busy
DoEvents 'wait for the page to load
Loop
'you will have to revise the below lines according to the HTML of the document
.document.getElementById("username").Value = username
.document.getElementById("password").Value = password
.document.getElementById("login-button").Click
End With
End Sub
像这样(这是明确的想法,你需要处理HTML对象)你将无法硬编码用户名和密码,但避免检查Internet Explorer外部线程。