※ ChatGPTを利用し、要約された質問です(原文:Excel VBAによるIEの制御に関して)
Excel VBAによるIEの制御に関して
このQ&Aのポイント
Excel VBAでHTMLページを操作するための方法はありますか?特に、メニューフレームのボタンをクリックして画面を変更し、テキストボックスに値を入力する方法を知りたいです。
Excel VBAを使用してHTMLページを制御する中で問題が発生しています。メニューフレームのボタンをクリックして画面を変更することはできましたが、テキストボックスに値を入力することができません。どのようにすれば値を入力できるのでしょうか?
Excel VBAを使用してHTMLページを操作していますが、メニューフレームのボタンをクリックして画面を変更することはできました。しかし、テキストボックスに値を入力することができません。どのようにすれば値を入力できるのでしょうか?
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)の操作で、見た目はメインフレームが「番号照会」画面に変化しているものの、内部的に?はメインフレームが「高度な書誌検索」画面のままであるのが原因のようです。
内部的にも、メインフレームを「高度な書誌検索」画面から「番号検索」画面に変化させるにはどうすれば良いのでしょうか?
非常に判り難い質問かと思いますが、何か判る方がいらっしゃいましたら、教えて頂けると幸いです。