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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

438閲覧

VBAで、一度STOPを入れないとホームページをクリックできないのはなぜ?

rickey

総合スコア24

VBA

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

1クリップ

投稿2019/03/23 02:40

編集2019/03/23 09:57

VBAでIEを扱い、とあるホームページをクリックしたいと考えいます。
【現象】
最初に3月のカレンダーが表示され、「翌月」というボタンを二回押して5月にしたい。
・最初のページを開いたときにSTOPをする(もしくはF9)をして、再開すると処理が進む。
・STOPを入れないと、クリックが一度しかできていなく、4月までしか行かない。

これがなぜなのかがわからず困っています。ご教授ください。
調べて、おそらくjavascriptはページを読み込む前に処理がされてしまうから、その辺が影響しているのかとsleepを入れたりもしたのですが、sleepを5秒にしてもできませんでした。
クリックしたい箇所↓

HTML

1<td style="vertical-align:middle;background-color:teal;"> 2<a href="" style="color: white;font-size:12pt;" onclick="checkAndSubmit('next_month', null);return false;"> 翌月 ></a></td>

作成したVBA

Sub クリックテスト() ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = "" ThisWorkbook.Sheets("Sheet1").Cells(1, 2) = "" ThisWorkbook.Sheets("Sheet1").Cells(1, 3) = "" Dim URL As Variant Dim objIE As InternetExplorer Set objIE = CreateObject("internetexplorer.application") URL = "http://www.namiyou.or.jp/gingamomiji/" 'IE(InternetExplorer)を表示する 画面に表示するTrue 非表示False objIE.Visible = True objIE.Navigate URL '待ち... Do While objIE.Busy Or objIE.ReadyState < READYSTATE_COMPLETE DoEvents Loop Do While objIE.Document.ReadyState <> "complete" DoEvents Loop Stop objIE.Document.getElementsByName("number_of_nights")(0).Value = 1 Sleep 500 ThisWorkbook.Sheets("Sheet1").Cells(1, 1) = objIE.Document.GetElementsByTagName("body")(0).innertext Call linkClick_self(objIE, "翌月") Sleep 500 ThisWorkbook.Sheets("Sheet1").Cells(1, 2) = objIE.Document.GetElementsByTagName("body")(0).innertext Call linkClick_self(objIE, "翌月") Sleep 500 ThisWorkbook.Sheets("Sheet1").Cells(1, 3) = objIE.Document.GetElementsByTagName("body")(0).innertext Call linkClick_self(objIE, "19") Debug.Print "終りました" End Sub '③「linkClick_self」指定した要素のリンクをクリックし、同じページで開くサブルーチン Sub linkClick_self(objIE As InternetExplorer, _ keywords As String, _ Optional ieTarget As String = "_self") '_blank 新しいウィンドウで表示する '_self 現在のウィンドウで表示する '_parent 親フレームで表示する '_top フレームの分割を解除してウィンドウ全体に表示する Dim objLink As Object For Each objLink In objIE.Document.Links If InStr(objLink.outerHTML, keywords) > 0 Then objLink.target = ieTarget objLink.Click Call ieCheck(objIE) Exit For End If Next End Sub

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2019/03/23 10:13

とりあえずHTMLのほうが壊れてるのでさっきにそっちの修正してください(あなたのものでない場合は業務妨害をしてるという認識でよろしいか?)
rickey

2019/03/23 12:55 編集

すいません、ちょっと指摘してくださいっている意味が理解できなくて教えていただけますか?業務妨害とはどういうことでしょうか?? 自分のサイトでないところを、VBAで情報を得るのはもしかして違法ということだったりするということですか?? 初心者であまり知識がないものです、ぜひ教えてください。 このサイトの中にもウェブスクレイピングに関する質問は多数ありますが、自分の運営してるサイトに対してでないと、違法だったりするんでしょうか??
ExcelVBAer

2019/03/25 00:11

過去に逮捕された方はいますね。 自己責任ですし、知らなかったではすまないので、 ご自分で詳しく調べてください。
guest

回答1

0

ベストアンサー

擬似的にIE側でタイマを使う方法で処理できないでしょうか。
下記を修正のうえ、実行してみてください。

VBA

1'window.setTimeout:第二引数msec後に第一引数で渡された関数がキューに登録される 2objIE.document.parentWindow.execScript "window.setTimeout(""document.GetElementsByTagName("body")(0).click();"",100);" 3

投稿2019/03/23 02:56

TanakaHiroaki

総合スコア1063

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

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

rickey

2019/03/23 21:18

返信ありがとうございます。いろいろ検索しながら、教えてくださったものをどう応用して実行していいかわからず、まだ進めずにいます。どこをどのように変更していいのかわからず、検索しているのですが。無知で申し訳ありません。
TanakaHiroaki

2019/03/23 22:38

私もどのように変更すべきかは、よくわかっていません。 ここから先は、ご自身でやってみてください。
rickey

2019/04/02 02:15

まだ解決はしてないですが、いろいろ試行錯誤してためしてみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問