2017-05-15 21 views
0

MS Accessで標準のWebブラウザコントロールを使用しています。コントロールには、ローカルHTMLファイルが表示されます。今、私はHTMLからVBAにデータを送信したいと思います。JavaScriptファイルをローカルファイルからVBA Webブラウザコントロールに送信する方法

<input type="text" onchange="foo(this.value)"> 

どのようにデータをVBAに送信しますか?私は2つの問題があります:

  1. HTMLファイルがローカルの場合、私はJavaScriptをまったく起動できません。ファイルにhttp URIがある場合は、たとえばalert()は可能ですが、ファイルがローカルの場合はできません。ローカルファイルでJavaScriptを使用するにはどうすればよいですか?

  2. どのようにしてJavaScript機能の結果をVBAに送信できますか?

PSは:私はVBAからJavascriptを開始する方法を探していないよ(Webbrowser.Document.parentwindow.execscript)

Thxを

マーティン

+0

https://stackoverflow.com/questions/7388391/detect-event-on- ie-visio/7410092#7410092 –

答えて

0

あなたが設定することができjs- WithEventsを実装するシンプルなクラスを使用してVBA間の通信を行い、ホストされたHTMLページ内の要素へのVBA参照をフックアップします。

以下の例を実行すると、HTMLテキストボックスを編集してからクリックすると(onchangeイベントが発生します)、入力にリンクされたクラスフィールドを介してVBAメッセージボックスがトリガーされます。

ローカルページとjsで問題を解決する方法を知るには、Googleの「ウェブのマーク」。埋め込みブラウザ制御wb1とユーザーフォームで

Option Explicit 

Private WithEvents txt As MSHTML.HTMLInputElement 

Public Sub SetText(el) 
    Set txt = el 
End Sub 

Private Function txt_onchange() As Boolean 
    MsgBox "changed: " & txt.value 
End Function 

:クラスモジュールclsHtmlText

Option Explicit 

Dim o As clsHtmlText '<< instance of our "withEvents" class 

Private Sub UserForm_Activate() 

    Dim el As MSHTML.HTMLInputElement 
    With Me.wb1 
     .Navigate "about:blank" 
     WaitFor wb1 
     .Document.Open "text/html" 
     'or you can load a page from a URL/file 
     'Note: local pages need "mark of the web" in the markup 
     .Document.write "<html><input type='text' size=10 id='txtHere'></html>" 
     .Document.Close 
     WaitFor wb1 

     Set el = .Document.getelementbyId("txtHere") 

     Set o = New clsHtmlText 
     o.SetText el '<< assign the textbox so we can monitor for change events 

    End With 

End Sub 

'utility sub to ensure page is loaded and ready 
Sub WaitFor(IE) 
    Do While IE.ReadyState < 4 Or IE.Busy 
     DoEvents 
    Loop 
End Sub 
関連する問題