1

IE ページを開いてその場所を表示する、以下の単純な Word マクロに取り組んでいます。マクロは、インターネット Web ページに対して正しく機能します。ただし、Web ページがローカル ファイルの場合、表示される場所は常に about:blank です。

なぜこれが起こるのか、どうすれば実際の場所を取得できますか? 開いているすべてのウィンドウを列挙するトリックを試してみましたが、うまくいきました。

ただし、以下の直接的な方法がローカルページで機能しないのはなぜだろうと思っています。

OS: Windows 7 + IE8

Option Explicit

Dim oIE

Sub Macro()

    Set oIE = CreateObject("InternetExplorer.Application")

    oIE.navigate "about:blank"

    oIE.Top = 0
    oIE.Left = 0
    oIE.Width = 500
    oIE.Height = 500

    oIE.navigate "C:\test\test.htm"

    oIE.Visible = 2

    Do While (oIE.Busy)
        DoEvents
    Loop

    MsgBox oIE.LocationName

    Set oIE = Nothing

End Sub
4

1 に答える 1

0

私のテストでは、Internet Explorer オブジェクトは読み込まれると切り離されます...

シェル ウィンドウをループすることで、IE オブジェクトを見つけて再割り当てできます。これが完了すると、LocationName を正常にクエリできるようになります

以下の私のテストルーチンを参照してください。

Sub Macro()
Dim oIE, oShell, objShellWindows, strPath, X

    strPath = "C:\test\test.htm"

    Set oIE = CreateObject("InternetExplorer.Application")

    'oIE.navigate "about:blank"
    oIE.Top = 0
    oIE.Left = 0
    oIE.Width = 500
    oIE.Height = 500

    oIE.navigate strPath

    Do While oIE.Busy And oIE.ReadyState < 2
        DoEvents
    Loop

    MsgBox oIE.LocationName & vbCrLf & oIE.LocationURL

    Set oShell = CreateObject("WScript.Shell")
    Set objShellWindows = CreateObject("Shell.Application").Windows
    For X = objShellWindows.Count - 1 To 0 Step -1
        Set oIE = objShellWindows.Item(X)
        If Not oIE Is Nothing Then
          '  Uncomment below line to troubleshoot
          '  MsgBox oIE.LocationName & vbCrLf & oIE.LocationURL
            If StrComp(oIE.LocationURL, "file:///" & Replace(strPath, Chr(92), "/", 1, -1, 1), 1) = 0 Then
                Do While oIE.Busy And oIE.ReadyState < 2
                    DoEvents
                Loop
                oIE.Visible = 2
                Exit For
            End If
        End If
        Set oIE = Nothing
    Next
    Set objShellWindows = Nothing
    If oIE Is Nothing Then
        MsgBox "Could Not Find The IE Window"
    End If

    MsgBox oIE.LocationName & vbCrLf & oIE.LocationURL

    Set oIE = Nothing

End Sub
于 2013-10-17T18:28:39.200 に答える