質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

8684閲覧

VBAでWeb上のボタンをクリックしたい(javascript, onclick)

BW70

総合スコア6

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2019/08/02 04:20

編集2019/08/13 04:43

VBA でWeb上のボタンをクリックするスクリプトが上手く書けません。
対象となるサイトは下記のソースの

<input type="button" name="btTimePunchEnd" value="終業打刻" onclick="execClose()">

この「終業打刻」ボタンをクリックするスクリプトが上手くかけません。

HTML

1<table class="PS_dataLine table2" width="400"> 2<tbody><tr> 3<th colspan="2" class="th_1" width="35%" id="today">2019年08月01日 (木) 13:43</th> 4</tr> 5<!-- 日付データ --> 6 7</td> 8</tr> 9<tr height="50"> 10<!-- 打刻終了時間:ボタン --> 11<th class="th_2" id="timeCloseButton"> 12<input type="button" name="btTimePunchEnd" value="終業打刻" onclick="execClose()"> 13</th> 14<!-- 打刻終了時間:表示 --> 15<td class="td_time_punch" id="timeClose"> 16 17 18</td> 19</tr> 20<tr height="30"> 21<td class="td_1_center" colspan="2" id="message"> 22 23</td> 24</tr> 25</tbody></table>

以下のコード1~4は↑のページにたどり着くためのコードで、
コード5として「終業打刻」をしたいと思っています。

VBA

1Sub 終業打刻() 2' 3' 就業打刻 Macro 4'---コード1|インターネットに接続してブラウザを開く--- 5 Dim objIE As InternetExplorer 6 Set objIE = CreateObject("InternetExplorer.Application") 7 objIE.Visible = True 8 9'---コード2|インターネットの特定のページを開く--- 10 objIE.navigate "https://jkap2.ffpri.go.jp/UPDSTMG/package/auth/view/Login.html" 11 Call IEWait(objIE) 'IEを待機 12 Call WaitFor(1) '1秒停止 13 14 15 16'---コード3|自動でログイン--- 17 18 Dim htmlDoc As HTMLDocument 19 Set htmlDoc = objIE.document 20 21 With htmlDoc 22 .getElementById("txtAccount").Value = "******" 'ユーザー名を指定 23 .getElementById("txtPassword").Value = "****" 'パスワードを指定 24 .getElementById("fm:idLoginButton").Click 25 End With 26 27 Call WaitFor(1) '1秒停止 28 29 30 31'---コード4|ウェブ上のボタンを自動でクリックして次へ--- 32 objIE.document.Script.setTimeout "javascript:setPermaLink('/UPDSTMG/package/view/Site.html?psSite=TMG_INP')", 1 33 34 Call WaitFor(3) '1秒停止 35 36'---コード5|終業打刻--- 37 38objIE.document.getElementsByName("btTimePunchEnd")(0).click 39 40 41End Sub

試したこと

以下を試しましたが、ダメでした。

VBA

1objIE.document.getElementsByName("btTimePunchEnd")(0).click

↑「オブジェクトはこのプロパティまたはメソッドをサポートしていません」と出てしまいます。

VBA

1objIE.document.getElementById("timeCloseButton").getElementsByTagName("input")(0).click

↑「オブジェクト変数またはwithブロック変数が設定されていません」と出てしまいます。

VBA

1objIE.navigate "javascript:execClose();"

VBA

1objIE.document.Script.setTimeout "execClose();", 1 2

↑この2つはエラーメッセージは出ませんが、何も起きません。

ご教授のほど、よろしくお願いします。

コード4のところの遷移画面です。

HTML

1 2<TABLE><TBODY> 3<TR> 4<TD onclick="javascript:setPermaLink('/UPDSTMG/package/view/Site.html?psSite=TMG_INP')" class=PS_siteLinkDesc style="CURSOR: pointer; BACKGROUND: url(/UPDSTMG/package/component/images/icon_personalSite.gif) no-repeat left 50%"> 5<DL> 6<DT class=PS_siteLink><A href="javascript:setPermaLink('/UPDSTMG/package/view/Site.html?psSite=TMG_INP')">就業入力サイト</A> 7<DT>あなたの就業実績情報を入力できます</DT></DL></TD> 8<TD onclick="javascript:setPermaLink('/UPDSTMG/package/view/Site.html?psSite=TMG_PERM')" class=PS_siteLinkDesc style="CURSOR: pointer; BACKGROUND: url(/UPDSTMG/package/component/images/icon_talentManagement.gif) no-repeat left 50%"> 9<DL> 10<DT class=PS_siteLink><A href="javascript:setPermaLink('/UPDSTMG/package/view/Site.html?psSite=TMG_PERM')">就業承認サイト</A> 11<DT>承認者・代理承認者用サイトです</DT></DL></TD> 12<TD class=PS_siteLinkDesc>&nbsp;</TD> 13<TD class=PS_siteLinkDesc>&nbsp;</TD></TR></TBODY></TABLE>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/08/02 04:23

そもそもgetElementsByName()で指定のElementはとれていますか?
x_x

2019/08/02 08:03

1番目2番目のパターンで正常に動きました。 問題点を明らかにするため、該当コード全体を載せることはできるでしょうか?
BW70

2019/08/05 05:46

コメントありがとうございます。 修正、追記いたしました。 よろしくお願いします。
x_x

2019/08/06 01:17

setPermaLink() では画面遷移が発生しているのでしょうか?
BW70

2019/08/13 00:50

出張につき返信が遅れました。 setPermaLink() では画面遷移があります。 コード3でログイン画面でログインをして現れる画面で、コード5で終業ボタンを押すための画面の間に1画面あるため、終業ボタンを押す画面へ移行するボタンをクリックしています。
x_x

2019/08/13 00:53

画面遷移があるのであれば、 Call IEWait(objIE) 'IEを待機 をそのあとにも追加してみたらどうなるでしょうか?
BW70

2019/08/13 01:02

x_x様 ありがとうございます。 特に変化はありませんでした。これまでも Call WaitFor(3)で3秒おいてみていました。
x_x

2019/08/13 04:06

その後これも追加で Set htmlDoc = objIE.document
BW70

2019/08/13 04:17

何度もコメントありがとうございます。 確認ですが、コード4の Call WaitFor(3) を Call IEWait(objIE) 'IEを待機 Set htmlDoc = objIE.document に置き換える、ということでよろしいでしょうか? しかし、残念ながら当初と同様のエラーが出てしまいます。
x_x

2019/08/13 04:19

setPermaLink の内容を提示できるでしょうか?
BW70

2019/08/13 04:41

コメントありがとうございます。 すいません、「setPermaLink の内容を提示」とはどういうことでしょう? 画面遷移のところのHTMLを載せておきます。 コード4で就業入力サイトをクリックして、コード5のページに移行します。
x_x

2019/08/13 07:09

すみません、htmlDoc は使ってなくて関係なかったですね。 現状、setPermaLink() で画面遷移している方法が不明なので、どのように待ったらいいかわかりません。 最初に提示されている HTML が Site.html ですか?
BW70

2019/08/13 07:31

コメントありがとうございます。 はい、最初に提示しているHTMLが打刻するサイトの打刻ボタンがある周辺のHTMLです。
guest

回答1

0

もしかして
こういうやつですか?

VBScript

1'打刻ボタンを押す 2Dim btn 3For Each btn In objIE.document.GetElementsByTagName("input") 4 If btn.Value = "終業打刻" Then 5 btn.Click 6 Exit For 7 End If 8Next

あと
頭にお約束のこういうやつは書いてますか?
withなんとかっていうエラーが出るときは、ここを忘れてたとか間違えてたとか、あと参照設定足りなかったとかの場合が多かったような気がします。

VBA

1Dim objIE As Object 2Set objIE = GetObject("new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}") 3objIE.Visible = True

投稿2019/08/02 07:35

sumire_cl

総合スコア228

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

BW70

2019/08/05 05:56

コメントありがとうございます。 1つめは '---コード5|終業打刻--- にそのままコピペしましたが 特にエラーは出ないものの、何も起きませんでした。 2つめは、コードの冒頭で Dim objIE As InternetExplorer と書いております。 コードの全文を転載しましたので、よろしくお願いします。
sumire_cl

2019/08/05 06:21

そのままコピペするのは…これVBScriptなので…
sumire_cl

2019/08/05 06:23

あと、ちゃんと動かないってときによくあるのが IEのセキュリティ設定(保護モード)がどうなってるかとかはいかがでしょうか?
BW70

2019/08/13 01:16

sumire_cl様 コメントありがとうございます。 ご教授いただいたもののうち GetElementsByTagName("input") を GetElementsByTagName("btTimePunchEnd") としたり GetElementsByName("btTimePunchEnd") とすると、エラーはおきないものの、何も起きませんでした。 また、 GetElementsByTagTagID("timeCloseButton") とすると 「オブジェクトはこのプロパティまたはメソッドをサポートしていません」 と出てしまいます。 2つめの方ですが、すいません "new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}" をどのように変更すれば良いかわかりません。 セキュリティ設定についてですが、このサイトを「信頼済みサイト」として保護モードを有効にする のチェックを外したところ、コード2でエラーが発生してしましました。
sumire_cl

2019/08/14 06:31

保護モードは 「Excel VBA IE 保護モード」 とかでググったほうが、どうしたらいいかわかるかも……。 とりえあず https://qiita.com/3mc/items/da045e86d25ef697ec43 「"new:{D5E8041D-920F-45e9-B8FB-B1DEB82C6E5E}"」もこれを検索ワードにしたら出てきます。
sumire_cl

2019/08/14 06:39

その「コード4」というところまではちゃんと動いて、「↑のページ」と書いてあるページが表示されるところまでは行けているのですよね?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問