dポイントプレゼントキャンペーン実施中!

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)の操作で、見た目はメインフレームが「番号照会」画面に変化しているものの、内部的に?はメインフレームが「高度な書誌検索」画面のままであるのが原因のようです。
内部的にも、メインフレームを「高度な書誌検索」画面から「番号検索」画面に変化させるにはどうすれば良いのでしょうか?

非常に判り難い質問かと思いますが、何か判る方がいらっしゃいましたら、教えて頂けると幸いです。

A 回答 (1件)

簡略化でも断片的でも実際に確認出来ない以上、何とも言いようがないかと。


取り合えず、マウスカーソル直下の要素を取得して、一番上の親のdocumentから列挙して比較するサンプル。
再帰処理のフレーム部分は環境が無かったので未確認。
(想像で書いてます)

参考URL:https://gist.github.com/kumatti1/46ccb4fda7be7b8 …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!