• ベストアンサー

JavaScriptからVBAの関数を呼び出し

Accessのフォームに 、WebBrowserコントロールを貼り付けて、 JavaScript が記述されている、HTML を表示させているのですが、 その HTML内の JavaScriptから、Access VBAの関数を呼び出したり、 イベントを発生させることは、可能でしょうか? 以上、宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

隠しボタン経由でVBA側にイベントを発生させるとか。 http://www.gizcollabo.jp/vbtomo/log/archive/vbqanda2_403_2.html

nyanko_daijin
質問者

お礼

ありがとうございました。 教えて頂いたサイトを参考に、テストプログラムを組んでみたら、うまく動作しました。 ---------------------------------------- アクセスで新規フォームを作る。 「Microsoft HTML Object Library」を参照設定。 WebBrowserコントロールを貼り付けて、以下のプログラムを貼り付け。 アクセスのフォームのプログラム ---------------------------------------- Option Compare Database Option Explicit Private WithEvents htmlCmd1 As MSHTML.HTMLInputButtonElement Private WithEvents htmlCmd2 As MSHTML.HTMLInputButtonElement Private Sub Form_Load() WebBrowser1.Navigate2 CurrentProject.Path + "\form.html" End Sub Private Sub WebBrowser1_DocumentComplete(ByVal pDisp As Object, URL As Variant) If URL = CurrentProject.Path + "\form.html" Then Set htmlCmd1 = WebBrowser1.Document.all.btn1 Set htmlCmd2 = WebBrowser1.Document.all.btn2 End If End Sub Private Function htmlCmd1_onclick() As Boolean MsgBox "test1が実行されました。" End Function Private Function htmlCmd2_onclick() As Boolean MsgBox "test2が実行されました。" End Function ---------------------------------------- form.htmlの中身 ---------------------------------------- <html> <head> <script type="text/javascript"> <!-- function test1(){ document.getElementById('btn1').click(); } function test2(){ document.getElementById('btn2').click(); } --> </script> </head> <body> フォームテスト</p></p> <!--確認処理開始用のボタン--> <input type="button" value="テスト開始1" onClick="test1()"> <input type="button" value="テスト開始2" onClick="test2()"> <!--ここからVBAのイベントを発生させる為の隠しボタン--> <input type="hidden" id="btn1" name="uid"> <input type="hidden" id="btn2" name="uid"> </body> </html> ----------------------------------------

関連するQ&A

  • webbrowserでのjavascriptを含むソース取得

    webbrowserでのjavascriptを含むソース取得 お世話になっております。 VB 2005を利用しています。 webbrowserを用いてHTMLソースの表示をしようと、 WebBrowser1.Document.Body.OuterHtml と記述したところ、javascriptのソースが表示されません。 同じサイトをIEのソースで表示すると問題なく表示できます。 HttpWebRequest を用いたソースの取得方法はわかるのですが、 事情があって、webbrowser上から行いたいのです。 よろしくアドバイスの程お願いいたします。

  • javascriptの関数内でHTMLを記述したいのですが、可能でしょ

    javascriptの関数内でHTMLを記述したいのですが、可能でしょうか? もし可能ならば、方法を教えてください。 よろしくお願いします。

  • Perl内でJavaScriptを利用したいのですが、その設置方法を教えてください。

    onChangeで関数内の処理(メニュー項目を変更する関数です)を実行したいと考えています。 JavaScriptの関数定義を記述する事が出来るのでしょうか。 また、出来る場合はその記述方法を教えてください。 HTMLでJavaScriptを利用するときと同様に、<HEAD></HEAD>に print<<EOM; <SCRIPT language="JavaScript"> <!--  関数 // --> </SCRIPT> EOM 関数を記述し、動いてほしいところに <SELECT NAME="「フォーム名」" onChange="「関数()」">と メソッドを記述したらいいのでしょうか。 が、いまカスタマイズかけているものは、HTMLのヘッダーが一括表示となっています。こういう場合でも、同じように<HEAD>内に記述していいのですか? よろしくお願いします。

    • ベストアンサー
    • Perl
  • HTML,JavaScript,accessについて...

    HTML,JavaScript,accessについて... こんにちは。趣味でJavaScriptをしている者です。 さっそくですが、質問させていただきます。 html1とhtml2があるとします。 html1に記述してあるJavaScriptでaccessに接続しているときに、 html1のフォームのボタンを押したときに、テキストボックスの入力内容と、 accessにあらかじめ作成しておいたテーブルのレコードに格納されている 文字列データが一致した場合に、html2に移動できるようにしたいのですが、 そのためには、JavaScriptの関数から、accessへSQL文を送ると思うのですが、 どのようなSQL文を作成すればよいのでしょうか? なにぶん、しろうとですので、説明がわかりにくいかと思いますが、 もしよろしければ、解説していただけないでしょうか。 よろしくお願いします。

  • VBAでjavascriptを操作

    カテゴリが違っていたら申し訳ありません。 VBAでIEを制御する際、色々調べているとjavascriptを使うシーンが たびたび出てくるのですが、あれはIEで読み込んだページ内にあるものを使っているのですか? それともIEの中に基本的な関数やメソッドが入っていて それも含め呼び出して使っているのでしょうか。 HTMLのソースを見てjavascriptのソースが分かるものについては、 それをVBAを使って動かすことはできるのは理解しています。 ページ内に存在しない基本的なjavascriptのコードは vbaだけで呼び出せたりするのですか? たとえば下記のページのOKボタンをクリックする場合、 http://kamicha1.web.fc2.com/Excel/Test20090726.html 下記のコードをVBEに記載しました。 このclick()はjavascriptの関数(メソッド?)なのでしょうか。 HTMLをclick()で検索しても該当はありませんでした。 ie.document.Script.setTimeout "javascript:document.getElementById('popOK').click()", 200 分かりにくい文章で申し訳ないのですが、 上記のコードはIDの部分を変えてればどんなページにも使えるものなのでしょうか。 恐れ入りますが、ご教示お願いします。

  • WebBrowser上でjavascriptを追加するには

    表題でご存知の方いらっしゃいましたらお願いします。 現在ExcelのVBAからWebBrowserを使っています。 最終的な目的は「WebBrowser上でクリックした画像のURLを クリップボードに保存したい」ですが、いろいろとその前段階で沈没寸前です。 WebBrowserのイベントに該当するものもなく、また開いているページの イベントも拾う方法がわかりませんで、 調べた結果、JavaScriptと連携させることを思いました。 既存のWebページを開いて、そこにJavascriptを埋め込んでと 思ったのですが、できません。 厳密にはinnerhtmlで追記できたのですが、無反応です。 そこでJscriptなども試しましたがイベントを検知できるやり方ができませんでした。 Javascriptを埋め込む方法をご存知の方、または別のアプローチが 有るという方どうぞお願いします。

  • なぜNavigateは候補に表示されないのでしょう

    なぜNavigateは候補に表示されないのでしょうか? フォームを作成し、 ツールボックス→[コントロールの選択]で Microsoft Web Browserをクリックしてフォーム上に設置しました。 そしてVBA画面のForm_Loadイベントで Me.WebBrowser1.Navigate URL を記述しようと思い Me.WebBrowser1.nと入力してもNameしか出てきません。 なぜNavigateは候補に表示されないのでしょうか? オブジェクトブラウザでNavigateを検索してみると [SHDocVw.WebBrowser のメンバ] としてヒットするので、 Me.WebBrowser1.nと入力したあとに表示されても良い気がするのですが・・・ Navigateのスペルは覚えにくいので候補が出たらいいなーと思っています。 ご教授よろしくお願いします。

  • JavaScriptでマウス位置をリアルタイムで取得

    ウィンドウを開いたら、マウス位置をリアルタイムで取得し、ウィンドウ上に表示ということをしたいのですが、まったくわかりません。 function mousecursor(evt){ //関数の定義 X = event.x; //イベント発生場所のX座標取得 Y = event.y; //イベント発生場所のY座標取得 window.status = X + "," + Y;} //ステータスバーに表示 document.onmousemove = mousecursor; //マウスカーソルが動いたら、関数を呼び出す。(bodyタグで呼び出しも可) というようなソースを手に入れたのでやってみたら、できることはできたんですが、なんとなくしか意味がわかってません。 HTMLやPerl、VBAなどはできるんですが、どうしてもJavaScriptがあんまり理解できないんです…。 リアルタイムで取得し、表示、ということではなくても、自分の任意したように出力させたいんです。 (たとえばどこかをクリックしたらアラート表示など) よろしくお願いします。

  • Sum関数の使い方

    Access2013 vba メインフォームのサブフォームコントロールの中にあるサブフォームA(帳票)のフィールド「金額」の合計値をメインフォームで表示したいのですが、その関数の式を以下のようにして入れましたが、何も表示されません。 「=Sum(Nz([SubForm01].[Form]![発注合計金額],0))」 どこが間違っているか教えて頂けないでしょうか・・・ よろしくお願いします。

  • Access VBA コントロール 削除

    Access の VBA にて、フォームに設置しているラベルやテキストボックスといったコントロールを削除するコードを作成したいのですが、どのように記述すればよろしいでしょうか?

専門家に質問してみよう