Excel VBA 打开超链接 - 一开始很慢?

Excel VBA to open hyperlinks - slowly initially?

我已经在线复制了一些 VBA 代码,可以在 Internet Explorer 中打开 excel 中的一组 link 到多个选项卡。问题是,尤其是在速度较慢的计算机上,IE 需要一点时间才能打开,因此计算机只会加载另一个 IE window 所以你最终会在一个 IE window 中说 3 links ],另一个 7,它偶尔也会漏掉一个 link。

因此,我通过在加载的每个 link 之间加入 2 秒的中断来减慢代码速度。这已经解决了问题 - 一个 IE 会话,所有 links 加载,现在这个问题是等待似乎过多。我想要的可能是延迟加载前 2-3 links,然后剩余的可以尽快加载(假设所有 links 确实最终加载,没有另一个 IE 会话也在加载..)

我该怎么做? - 提前谢谢你。

无论如何这是代码:忽略开头和结尾的位,它只是突出显示各种 link 并隐藏一些列...:[=​​13=]

Sub Convert2links()
'
' Convert2links Macro
'

'
Columns("G:L").Select
    Range("G7").Activate
    Selection.EntireColumn.Hidden = False
    Range("J8:J28").Select
    Selection.Copy
    Range("K8").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Range("A8").Select
    Selection.End(xlDown).Select
    Selection.End(xlToRight).Select
    Selection.End(xlToRight).Select
    ActiveCell.Offset(0, 2).Range("A1").Select
    Range(Selection, Selection.End(xlUp)).Select
    Application.CutCopyMode = False

Dim Rng As Range
Dim WorkRng As Range
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
For Each Rng In WorkRng
    Application.ActiveSheet.Hyperlinks.Add Rng, Rng.Value
Next


    Dim xHyperlink As Hyperlink
    On Error Resume Next
    xTitleId = "KutoolsforExcel"
    Set WorkRng = Application.Selection
    For Each xHyperlink In WorkRng.Hyperlinks
        xHyperlink.Follow
        Application.Wait (Now + TimeValue("00:00:02"))
    Next
    Columns("H:K").Select
    Range("H7").Activate
    Selection.EntireColumn.Hidden = True
    Range("A8").Select
End Sub

这是 Ken Puls 的一些修改代码,用于检查 IE 是否打开

Public Function IEIsOpen() As Boolean

 'IMPORTANT:  Requires reference to Microsoft Internet Controls!!
    'Set in Tools --> References --> Microsoft Internet Controls

    Dim shellWins As SHDocVw.ShellWindows
    Dim explorer As SHDocVw.InternetExplorer

    Set shellWins = New SHDocVw.ShellWindows

    For Each explorer In shellWins
        If explorer.Name = "Internet Explorer" Then
            IEIsOpen = True
            Exit For
        End If
    Next

    Set shellWins = Nothing
    Set explorer = Nothing

End Function

然后你可以这样做

For Each xHyperlink In WorkRng.Hyperlinks
    xHyperlink.Follow
    Do Until IEIsOpen
        DoEvents
    Loop
Next

它将打开第一个,然后在打开 IE 之前不会打开任何其他。

更新

你最好在那里检查一下以防止死循环

Dim dtStart As Date

dtStart = Now
For Each xHyperlink In WorkRng.Hyperlinks
    xHyperlink.Follow
    Do Until IEIsOpen Or Now - dtStart > TimeSerial(0, 0, 5)
        DoEvents
    Loop
Next xHyperlink

现在它将等待 IE 或五秒,以先到者为准。