Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Pro : Access 2016)
「Microsoft Web Browser」コントロールでの操作
投稿日時: 21/10/15 12:08:11
投稿者: コンギョ

「Microsoft Web Browser」コントロールにwebページを表示して、該当するテキストボックスに値を入れます。ここまではできました。
その後「Microsoft Web Browser」コントロールのwebページのボタンをクリックして画面を移動したいのですが、ボタンをクリックするコードがわかりません。※いろいろ探しましたがC#やVB.netばかりでした。
 
ご教授の程、よろしくお願いします。

回答
投稿日時: 21/10/16 11:20:23
投稿者: hatena
投稿者のウェブサイトに移動

webページのボタンといっても、
Input要素だったり、button要素だったり、単なるaリンクをボタンらしいデザインにしていたりと、いろいろあります。
 
最低限、そのボタンを含めて前後のHTMLを提示してもらわないと回答できないですね。
 
あと、現状のできているところまでのコードも提示てもらうとなんらかの回答が付くと思います。

投稿日時: 21/10/16 23:55:25
投稿者: コンギョ

hatena様
 
回答ありがとうございます。
 
作成したコードは以下になります。
 
Microsoft Web Browserの名前:webView
Me!webView.Object.Navigate "http://*************" ←*の部分は伏せています。
Me!webView.Object.Document.getElementByID("userid").Value = "****" ←*の部分は伏せています。
Me!webView.Object.Document.getElementByID("pass").Value = "****" ←*の部分は伏せています。
 
Me!webView.Object.document.getElementById("login").Click ←これが効かない。
 

引用:
Input要素だったり、button要素だったり、単なるaリンクをボタンらしいデザインにしていたりと、いろいろあります。

 
要素はページを解析して、ボタン「button」であることがわかっています。
 
どうぞよろしくお願い致します。

回答
投稿日時: 21/10/17 02:12:05
投稿者: hatena
投稿者のウェブサイトに移動

コンギョ さんの引用:

要素はページを解析して、ボタン「button」であることがわかっています。

そのボタンのIDは、login で間違いないですか。
 
間違いないなら、HTMLを提示してもらわないと、やはりこれ以上の回答は難しいとおもいます。

投稿日時: 21/10/18 09:29:04
投稿者: コンギョ

hatena様
  
回答ありがとうございます。
 

引用:
そのボタンのIDは、login で間違いないですか。

 
すいません。いろいろ間違っていました。
まずIDやNameが見つからない状態でした。ただ、type=button なのでボタンと判断していました。
 
<INPUT class="button" style="FONT-SIZE: 13pt; COLOR: #99FF99" onclick="javascript:nextPage(this);" type="button" value=Signin>
 
質問の内容ですが、正しくは「要素はボタンとわかっていて、名前やIDが見つからない場合、どうすればクリックすることができるでしょうか。」
 
よろしくお願いいたします。

回答
投稿日時: 21/10/18 10:49:58
投稿者: hatena
投稿者のウェブサイトに移動

class名が"button"なのでそれで探すといいですね。
getElementsByClassnameを使います。
 
getElementsと複数形になっていることかも分かりますが、
クラス名は同じものが複数ある場合がありますので、配列(のようなもの)として返りますので、
何番目のものか指定する必要があります。
 
HTMLを先頭から見ていって、何番目のものか確認して、
 
Me!webView.Object.document.getElementById("button")(2).Click
 
というようにします。
3番目の場合は、getElementById("button")(2) というように指定します。配列のインデックスは0から始まりますので。
 
 
 
 

投稿日時: 21/10/18 16:13:02
投稿者: コンギョ

hatena様
  
回答ありがとうございます。
 

引用:
HTMLを先頭から見ていって、何番目のものか確認して、
  
Me!webView.Object.document.getElementById("button")(2).Click

 
何番目のものか確認する前にまず動作するか確認したところ下記のエラーになりました。
 
実行時エラー 91: オブジェクト変数、またはブロック変数が設定されていません
 
webページにはボタンは1つしかないので、(0)からやってみましたがエラーになります。
何か参照設定とかやっていないとかでしょうか。
 
よろしくお願いいたします。

回答
投稿日時: 21/10/18 16:45:48
投稿者: hatena
投稿者のウェブサイトに移動

最初に getElementsByClassname を使うと言っておきながら、
途中から間違ってました。
下記に修正してください。
 
Me!webView.Object.document.getElementsByClassname("button")(2).Click

投稿日時: 21/10/19 12:57:39
投稿者: コンギョ

hatena様
  
回答ありがとうございます。
 

引用:
Me!webView.Object.document.getElementsByClassname("button")(2).Click

早速試してみましたが、下記のエラーになりました。
 
実行時エラー '438':
オブジェクトは、このプロパティまたはメソッドをサポートしていません。
 
いろいろ調べてみて下記の結論がわかりました。
・ターゲットとなる「URL」のページのIEのドキュメントモードは「IE7」であること。
・「IE8」以下だとgetElementsByClassNameは未対応であること。
 
なので、hatena様のご指摘内容をヒントにいろいろ調べて別の方法で「button」を探してみました。
※参照設定でMicrosoft HTML Object Libraryをチェック
Dim element As IHTMLElement
For Each element In Me!webView.Document.all
 
    If element.getAttribute("className") = "button" Then
        '最初に見つかった「button」をクリック
        element.Click
        Exit For
    End If
  
Next
 
これで無事にボタンをクリックすることができました。
いろいろ教えていただいてありがとうございました。
 
ただ、開いた次のページでの操作で止まってしまったので別の質問にて投稿させていただきます。
引き続き教えてほしいです。
 
よろしくお願いいたします。