在VBA中使用InternetExplorer.Application

时间:2015-01-27 19:05:34

标签: excel vba internet-explorer excel-vba

我正在尝试构建一个简单的宏,它允许用户从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循环后的部分无法正常工作。任何人都可以指出我出错的地方吗?

1 个答案:

答案 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外部线程。