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)の操作で、見た目はメインフレームが「番号照会」画面に変化しているものの、内部的に?はメインフレームが「高度な書誌検索」画面のままであるのが原因のようです。
内部的にも、メインフレームを「高度な書誌検索」画面から「番号検索」画面に変化させるにはどうすれば良いのでしょうか?
非常に判り難い質問かと思いますが、何か判る方がいらっしゃいましたら、教えて頂けると幸いです。
お礼
まず、お礼遅れたこと申し訳ありません。 ご丁寧にありがとうございます。 プリントサーバーの件に関してはこちらでも同様な意見です。 SIなどからも色々案を出していただきましたが 結局は結局2台構成が一番小売が良いという結論に なりました。 ご意見ありがとうございます。