1

Webページフレームが他のページに移動しようとしているときにVBAで何らかのアクションを実行できるVBAコードが必要です。たとえば、リンクをクリックすると、ボタンが他のページに移動します前にページのスクリーンショットを撮りたいフレームは他に移動します。私はこのようなことをしましたが、空白のページのスクリーンショットを撮っていて、ページがナビゲートされてオブジェクトが変更されたときに一度だけ機能します。これで私を助けてください。2週間助けて以来、私はこれを探していました。

Sub pageLoad()
Set ie2 = GetIE("https://xyz.com")
Dim LinkFound As Boolean
Dim linkCollection
Dim IEfr0 As Object
i = 0
Dim Link As MSHTML.HTMLAnchorElement
'HTMLInputElement
Set wordapp = CreateObject("word.Application")
wordapp.Visible = True
Set wrdDoc = wordapp.Documents.Add

Set IEfr0 = ie2.document.frames(0).document
Set linkCollection = IEfr0.getElementsByTagName("a")
Do While ie2.Visible = True
For Each Link In linkCollection
If ie2.document.frames(2).document.readyState = "interactive"  Then
sai1
End If

If IEfr0.readyState = 1 Then
sai1
End If
Next
Loop
End Sub
Sub sai1()
Application.SendKeys "{PRTSC}"
wordapp.Selection.Paste
Do While ie2.Busy
Loop
End Sub
4

1 に答える 1

1

これが可能な解決策です。オブジェクトを作成し、 BeforeNavigate2イベントを指定する方法のみを示します。これには、Microsoft Internet Controls を参照し、IE オブジェクトを作成する必要があります (これは遅延バインディングでは機能しません)。標準モジュールでは WithEvents を使用できないため、このコードはオブジェクト モジュール (ワークシートまたはブック) 内にある必要があります。

Option Explicit
Dim WithEvents ie As InternetExplorer

Sub Example()
    Set ie = New InternetExplorer
    ie.Visible = True
    ie.Navigate "Your URL Here..."
    Do Until ie.ReadyState = READYSTATE_COMPLETE: DoEvents: Loop
End Sub

Private Sub ie_BeforeNavigate2(ByVal pDisp As Object, URL As Variant, Flags As Variant, TargetFrameName As Variant, PostData As Variant, Headers As Variant, Cancel As Boolean)
'Place code to run before navigating here.
End Sub 

これで発生する可能性のある問題は、一部の Web サイトでは、読み込み時にリソースの追加呼び出しが原因で、BeforeNavigate2 イベントが実際に複数回発生することです。

于 2012-10-28T22:15:53.580 に答える