Excel VBAによるIEの制御に関して

このQ&Aのポイント
  • Excel VBAでHTMLページを操作するための方法はありますか?特に、メニューフレームのボタンをクリックして画面を変更し、テキストボックスに値を入力する方法を知りたいです。
  • Excel VBAを使用してHTMLページを制御する中で問題が発生しています。メニューフレームのボタンをクリックして画面を変更することはできましたが、テキストボックスに値を入力することができません。どのようにすれば値を入力できるのでしょうか?
  • Excel VBAを使用してHTMLページを操作していますが、メニューフレームのボタンをクリックして画面を変更することはできました。しかし、テキストボックスに値を入力することができません。どのようにすれば値を入力できるのでしょうか?
回答を見る
  • ベストアンサー

Excel VBAによるIEの制御に関して

Excel VBAで以下のようなフレーム構造を持つHTMLページを操作したいと考えています。 (実際はもっと複雑なページですが、簡略化して記載しています) <HTML> <HEAD> <TITLE>ようこそ ○○さん</TITLE> </HEAD> <FRAMESET id=frameset1 border=0 name=TotalFrame frameSpacing=0 rows=48,*,0,0 frameBorder=0> <FRAME name=header src="./Header/Header.aspx" noResize scrolling=no> <FRAMESET id=frameset2 border=0 frameSpacing=0 frameBorder=0 cols=144,*> <FRAMESET id=menuFrame border=0 name=menuFrame frameSpacing=0 rows=22,*,0 frameBorder=0> <FRAME id=option6 name=option6 src=""> <FRAME name=Contents src="./Menu/MenuFrame.aspx" noResize scrolling=no> <FRAME name=sub2 src="" height="0"> </FRAMESET> <FRAMESET border=0 name=mainFrame frameSpacing=0 rows=*,0> <FRAME name=main src="" scrolling=no> <FRAME name=sub src="" height="0"> </FRAMESET> </FRAMESET> <FRAME name=message src="" height="0"> <FRAME name=footer src="" height="0"> </FRAMESET></HTML> このWebページは、メニューフレームに「番号検索」「高度な書誌検索」などの各種メニューボタンがあり、これらメニューボタンをクリックすると、各メニューに対応した検索画面がメインフレームに表示されるというページ構成になっています。 このWebページを開いた時点(デフォルト)では、メインフレームは「高度な書誌検索」画面になっています。 そこで、 (1)メニューフレームの「番号検索」ボタンをクリックしてメインフレームを「番号検索」画面に変更し、続いて、 (2)メインフレームに表示された「番号検索」画面のテキストボックスに値を入力したいと考えています。 (1)メニューフレームの「番号検索」ボタンをクリックし、メインフレームを「番号検索」画面に変更する操作は以下のプロシージャで上手くいきました。    Dim IE As InternetExplorer, htdoc As HTMLDocument, htdoc_frame As HTMLDocument, htdoc_frame_frame As HTMLDocument, anchor As HTMLAnchorElement    Set IE = CreateObject("InternetExplorer.Application") IE.Visible IE.Navigate "http://www.○○○・・・(省略)・・・" Do While IE.Busy Or IE.ReadyState <> 4 DoEvents Loop Set htdoc = IE.Document Set htdoc_frame = htdoc.frames("Contents").Document Set htdoc_frame_frame = htdoc_frame.frames("header").Document For Each anchor In htdoc_frame_frame.getElementsByTagName("DIV") If anchor.ID = "G04" Then 'G04は「番号検索」ボタンに相当するID anchor.Click Exit For End If Next しかし、続く、(2)メインフレームに表示された番号検索画面のテキストボックスに値を入力する操作が、以下のプロシージャでは上手く行きません。 Set htdoc = IE.Document Set htdoc_frame = htdoc.frames("main").Document Set htdoc_frame_frame = htdoc_frame.frames("main").Document Dim txtAreaOutput As HTMLInputElement Set txtAreaOutput = htdoc_frame_frame.getElementsByName("TextBox1")(0) txtAreaOutput.Value = "VBAからの書き込み" 上記プロシージャを実行してもエラーは発生しないのですが、テキストボックスに"VBAからの書き込み"という値が入力されません。 自分でいろいろ調べてみたところ、どうも、(1)の操作で、見た目はメインフレームが「番号照会」画面に変化しているものの、内部的に?はメインフレームが「高度な書誌検索」画面のままであるのが原因のようです。 内部的にも、メインフレームを「高度な書誌検索」画面から「番号検索」画面に変化させるにはどうすれば良いのでしょうか? 非常に判り難い質問かと思いますが、何か判る方がいらっしゃいましたら、教えて頂けると幸いです。

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

  • ベストアンサー
  • kumatti1
  • ベストアンサー率60% (73/121)
回答No.1

簡略化でも断片的でも実際に確認出来ない以上、何とも言いようがないかと。 取り合えず、マウスカーソル直下の要素を取得して、一番上の親のdocumentから列挙して比較するサンプル。 再帰処理のフレーム部分は環境が無かったので未確認。 (想像で書いてます)

参考URL:
https://gist.github.com/kumatti1/46ccb4fda7be7b8e8b10

関連するQ&A

  • 画面の四分割の方法について

    教えていただきたいのですが、↓で作成した画面の最下部にbottom(titleと同じ幅で画面の下部)を作りたい場合は、どのように追加記述すべきなのでしょうか? いろいろ試しているのですが上手くいかないのです(汗 <frameset rows="90,*" border="0" frameborder="0" framespacing="0"> <frame name="title" src="title.html" scrolling="NO" noresize> <frameset cols="180,*" border="0" frameborder="0" framespacing="0"> <frame name="menu" src="menu.html" noresize> <frame name="body" src="body.html"> </frameset> </frameset> 宜しくお願いいたします。。。

    • ベストアンサー
    • CSS
  • 改・キーボードナビゲーション

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=762151 にて質問し、解決したに見えたのですが、確認もせず閉じた為、再度投稿させて下さい。 ページトップにフレームファイルを置き、 <frameset cols="250,*" frameborder="0" framespacing="0"> <frameset rows="16,*" frameborder="0" framespacing="0"> <frame src="***.html" name="0" SCROLLING="NO" NORESIZE> <frameset rows="25,*" frameborder="0" framespacing="0"> <frame src="***.html" name="1" SCROLLING="NO" NORESIZE> <frameset rows="51,*" frameborder="0" framespacing="0"> <frame src="***.html" name="2" SCROLLING="NO" NORESIZE> <frame src="***.html" name="3" SCROLLING="NO" NORESIZE> </frameset> </frameset> </frameset> <frame src="***.html" name="4" SCROLLING="NO" NORESIZE> </frameset> とします。 NAME“0”のページがメニューで、ここをクリックするとNAME“1”に開かれる仕組みです。 NAME0に、 function checkNavigation() { if(event.keyCode==49)location.href="NAME1に開くページ"; } window.document.onkeydown = checkNavigation; と書きます。 前投稿では、「1.location.~」とすればOKだとなっていたのですが、確認した所何故か機能しませんでした。 NAME0をアクティブページにして“1”を押下してみたり、試して見たのですが駄目でした。 どうしたら良いのでしょうか。お願いします。

  • javascriptが動かない

    javascript初心者です。 画面を三分割し、画面ロード時にそれぞれのフレームの位置を表示するという、サンプル的なのを作ったのですが、画面は分割されますが、上、左、右 ってのが表示されないです。 javascriptの記述の仕方が根本的に違いますかね? 下記に書いてあるのがそのソースコードです。 どなたかお願いします。 <html> <head> <title>FrameSample</title> <script type="text/javascript" > function frameinit(){ frames["top"].document.write("上"); frames["left"].document.write("左"); frames["right"].document.write("右"); } window.onload=frameinit; </script> </head>    <frameset rows="100,*">      <frame src="newpage4.html" name="top" >       <frameset cols="50,50">          <frame src="newpage4.html" name="left">         <frame src="newpage4.html" name="right">        </frameset>   </frameset> </html>

  • 複数フレームへのリンクがネスケで作動しません。

    フレームありのサイトを作り、検索等で末端ページにヒットしてきた方へ「戻る」ボタンでフレームごと全体表示したいと思い、作業しています。 こちらの過去ログを見てここまで作れましたが、ウィンドウズのネスケ4.7では白画面になってしまいます。 ソースは以下の通りです↓ <script language="JavaScript"> function framepage(filename) { document.open(); document.write("<frameset rows='80,*' frameborder='NO' marginwidth='0' marginheight='0' framespacing='0'>"); document.write("<frame name='topFrame' src='上部分.html'>"); document.write("<frameset cols='152,*' frameborder='NO' marginwidth='0' marginheight='0' framespacing='0'>"); document.write("<frame name='leftFrame' src='左部分.html'>"); document.write("<frame name='main' src=" + filename + ">"); document.write("</frameset>"); document.close(); } </script> <a href="javascript:framepage('右部分(任意に変更可能).html')">[戻る]</a> win、mac共にIEでは正常動作しています。 どなたかご存じの方がいらっしゃたら教えて下さい!

  • 直フレーム内ページにきた場合とトップからきた場合の「戻る」について

    以前「複数フレーム内リンク」でお世話になりました。今度も煮詰まってしまいました。 ・トップ→コーナー→末端ページという構成 ・「上部・左・メイン」の3つフレームを使用している状況です。 検索でフレーム内の末端ページに飛んできた人に「戻る」ボタンでコーナーのindexにフレーム有りの状態で表示したいのです。 只今、上記については作動できるのですが、逆にトップ→コーナー→末端ページと通常の流れできた人が、その「戻る」を押すと3つのフレームの中のメインフレームにまた3つのフレームが表示されてしまいます。 戻るに「target='_top'」や「target='_parent'」とつけてもいきません。といいますか、付け方がわかりません。 ソースは↓ <script language="JavaScript"> function framepage(filename) { document.open(); document.write("<frameset rows='80,*' frameborder='NO' marginwidth='0' marginheight='0' framespacing='0' border='0' target='_top'>"); document.write("<frame name='topFrame' src='上部.html' scrolling='NO' noresize>"); document.write("<frameset cols='152,*' frameborder='NO' marginwidth='0' marginheight='0' framespacing='0' border='0' target='_top'>"); document.write("<frame name='leftFrame' src='左.html' scrolling='NO' noresize>"); document.write("<frame name='main' src=" + filename + ">"); document.write("</frameset>"); document.write("</frameset>"); document.close(); } </script> bodyの方は↓ <a href="javascript:framepage('../index.html')">[戻る]</a> となっています。 どなたか宜しくお願いします!

  • (IE8)FRAMEで指定したページが表示されません

    IE7からIE8に更新してからフレームの表示が不可解なものになりました。 現象: index.htmlの中で以下のように指定しています。 <FRAMESET COLS="160,*" FRAMEBORDER=NO BORDER=0> <FRAME SRC="./menu.html" NAME="menu"> <FRAME SRC="./top.html" NAME="main"> </FRAMESET> このindex.htmlを表示すると左側フレームのmenu.htmlは表示されますが、 右側フレームにはtop.htmlではなくmenu.htmlからリンクしている別のページが 表示されます。 IE7の時は普通に左にmenu.html、右にtop.htmlが表示されていました。 IE8でもIE7と同様に表示するようにするにはどうすれば良いでしょうか?

  • フレームに関する制御、文書間にまたがる制御

    フレームページのソース <frameset rows="100%,66,*" border=0 frameborder=0 framespacing=0 framecolor="#000000"> <frame name=metrouser src="x.html" scrolling=auto> <frame name=metroowner src="m.html" scrolling=no marginheight=2 marginwidth=0> </frameset> --------------------------- 以上のような場合に、x.htmlに記述したjavascriptでm.htmlのページを制御したいのです。ただし、frameには名前が付いていないことに注意してください。 したい制御方法 ・ページを変える  たぶん、location.href=を使えばよいと思うのですが、よく分かりません。 ・フレームの幅を変える  100%,66,* から任意のものに変更する 以上の2通りの制御方法を教えて欲しいです。 よろしくお願いいたします。

  • ブラウザによってフレームの表示が異なるのですが..

    はじめまして。 現在下記のような形のHPを制作しているのですが、フレームが難しくてなかなか進めません。 ブラウザやそれぞれの環境によって見え方が違ってしまいます。 私の環境では真ん中にぎゅっと詰まってスクロールが出てしまうような小さな見え方になってしまっています。 どの環境で見ても統一させるにはどのようにしたら良いのでしょうか。 ------------------------------ 上の固定バー ------------------------------ メニュー|内容     |     |     |     | ------------------------------ 下の固定バー ------------------------------ ソースは以下のように組みました。 <frameset rows="10%,*" cols="*" framespacing="0" frameborder="no" border="0"> <frame src="Margin/Index.html" scrolling="No" noresize title="topFrame"> <frameset rows="*,230" cols="*" framespacing="0" frameborder="no" border="0"> <frameset cols="215,*" frameborder="no" border="0" framespacing="0"> <frame src="Margin/Index.html" scrolling="No" noresize title="menuBarFrame"> <frameset cols="*,25%" frameborder="no" border="0" framespacing="0"> <frameset rows="64,*" frameborder="no" border="0" framespacing="0"> <frame src="topbar/topbar.html" scrolling="No" noresize title="topBarFrame"> <frameset rows="*,41" cols="*" framespacing="0" frameborder="no" border="0"> <frameset rows="*" cols="178,*" framespacing="0" frameborder="no" border="0"> <frame src="menu/menu.html" scrolling="No" noresize title="leftFrame1"> <frame src="top/top.html" name="main" title="topFrame"></frameset> <frame src="bottombar/bottomBar.html" scrolling="No" noresize title="bottomFrame1"> </frameset> </frameset> <frame src="Margin/Index.html" scrolling="No" noresize title="rightFrame"> </frameset> </frameset> <frame src="Margin/Index.html" scrolling="No" noresize title="MenuBarFrame"> </frameset> </frameset> <noframes> ------------- また、現在フレームは推奨されないのも知っているので、 オススメの組み方がありましたら教えていただけませんでしょうか。 HTML等に関してまったくの初心者ですので、判り易く教えていただけたら大変有り難く思います。どうぞよろしくお願いします。

    • ベストアンサー
    • HTML
  • 横スクロールバーについて

    Dreamweavwe8にて作業しています。 製作した画面はフレーム構造のメインコンテンツを表示する部分なのですが、フルCSSにて製作、確認画面でその画面だけを表示すると縦スクロールだけが表示され、横スクロールは通常時は表示しませんが、 INDEXを立ち上げ、フレームの一部としてみた時、横スクロールが表示されます。 それは、縦スクロールが消えるサイズまで広げると消えるのですが、縦スクロールがある間は表示されます。 ページの設定でスクロールは自動にしてあります。 フレームの設定は、 <frameset cols="166,*" frameborder="NO" border="0" framespacing="0"> <frame name="leftFrame" noresize scrolling="NO" src="menu.html"> <frameset rows="135,*" cols="*" frameborder="NO" border="0" framespacing="0"> <frame name="topFrame" noresize scrolling="NO" src="header.html" > <frame name="mainFrame" src="top.html"> </frameset> </frameset> としてあります。 ここで何か設定が必要なのでしょうか? 私が困っているのはtop.htmlのところです。 解りにくくてすいませんが、よろしくお願いします。

  • フレームを使ったページ

    <FRAMESET ROWS="105,*" BORDER="0" FRAMEBORDER="0" FRAMESPACING="0" NOBORDER> <FRAME SRC="menu.html" name="menu" scrolling="no" noresize marginwidth="0" marginheight="0"> <FRAME src="main.html" name="main" scrolling="no" marginwidth="0" marginheight="0"> </FRAMESET><noframes></noframes> 上記フレームを使ったページを更新ボタンで更新すると横にスクロールバーが表示されます。 スクロールバーがでるのは上のページ(menu.html)で下ページ(main.html)にはでません。 win(Netscape,IE)で確認するとでないのですがMac(IE)だとスクロールバーがでてしまいます。 どうすれば解消できるでしょうか。 教えて下さい。 よろしくお願いいたします。

    • ベストアンサー
    • HTML

専門家に質問してみよう