首页 > 解决方案 > VBA - 从 Excel 文件中获取 URL 以供 IE 浏览

问题描述

到目前为止,我的这段代码是从一个较旧的代码中引用的,它从 excel 中获取数据并将其放入 SAP 中。

我希望做的是让 VBA 获取 excel 中的链接,以便 IE 在执行特定任务后在单个窗口中导航。

Sub accounts()


Dim ie As Object
Set ie = CreateObject("internetexplorer.application")
'ShowWindow ie.hwnd, SW_SHOWMAXIMIZED
ie.Visible = True


'Create objects to application, workbook and sheets
Set xclapp = CreateObject("Excel.Application")
Set xclwbk = ActiveWorkbook
Set xclsht = xclwbk.Sheets("accounts")

'Line Reference
line_index = 2
link = ""


'Loop line
Label1:
    While Sheets("accounts").Cells(line_index, 1).Value <> ""

        'Get websites from Excel
        link = xclwbk.Sheets("accounts").Cells(line_index, 1).Value

        'Open link
        ie.Navigate link

            While ie.ReadyState <> 4 Or ie.Busy
               DoEvents
            Wend

        line_index = line_index + 1 'Loop

        Application.Wait (Now + TimeValue("0:00:3")) 'wait

    Wend

End Sub

它现在正在从 excel 打开网站,但在第二行之后导航失败。有什么想法吗?

我仍在尝试学习 VBA,任何帮助将不胜感激。谢谢!

标签: excelvba

解决方案


您在帖子中的代码不会/不应该工作。我认为您没有使用 VBA,可能是 SAP 中的 VBS?(这不应该是一个问题)如果您的代码示例是您的实际子的缩短版本,最好将整个内容作为您的代码包含在内,因为它可能会使您更容易理解您的问题。

无论如何,浏览器打开并且没有任何反应。

在您的行.navigate "Trim(Link)"中,实际上并没有传递经过修剪的链接版本。您正在传递文字文本“trim(link)”

下面的示例将导航到存储在 range 中的 URLSheet1!A1:A10 导航命令下方的代码会在页面完全加载时暂停脚本,然后再继续。

Sub Main()
Dim Browser As Object
Dim Sheet As Worksheet
Dim Row As Integer
Dim Link As String

Set Browser = CreateObject("InternetExplorer.Application")
Set Sheet = ThisWorkbook.Worksheets("Sheet1")
Browser.Visible = True

For Index = 1 To 10
    Link = Sheet.Cells(Row, 1)
    Browser.Naviage Trim(Link)

    While Browser.ReadyState <> 4 Or Browser.Busy
        DoEvents
    Wend
Next Index

End Sub

更新

这只是您上面代码的副本,添加对 Internet 控件的引用不会解决您的问题,但可以访问 IDE 中的智能型数据(代码完成、方法名称等)可以帮助调试。

您尝试单击的页面,您能否提供链接以查看您要单击的内容?

当我运行下面的代码时,它将导航到工作表上的所有链接,我也添加了一些行来调试它的过程。

如果您在 Excel 中,则无需创建默认提供的 excel 对象。

' Add Reference to "Microsoft Internet Controls" (Tools->References)

Sub AccountsTest()
Dim IE As New InternetExplorer
IE.Visible = True

Dim Sheet As Worksheet
Set Sheet = ThisWorkbook.Worksheets("accounts")

Dim Row As Integer
Dim Link As String

Row = 2

Debug.Print "Starting Processing Links"

While Sheet.Cells(Row, 1).Value <> ""
    Link = Sheet.Cells(Row, 1).Value2 ' here

    Debug.Print "Navigating to <" & Link & ">"

    IE.Navigate Link

    While IE.ReadyState <> 4 Or IE.Busy
        DoEvents
    Wend

    Debug.Print "Navigation Complete"

    Application.Wait (Now + TimeValue("0:00:03"))

    Row = Row + 1
Wend

Debug.Print "No More Links - End"

IE.Quit
Set IE = Nothing

End Sub

推荐阅读