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

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

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

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

Q&A

1回答

739閲覧

VBAでチェックボックスの選択(IE)

33sansan

総合スコア2

VBA

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

0グッド

1クリップ

投稿2020/07/24 04:59

編集2020/07/24 12:14
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Sub authorize() Dim objie As InternetExplorer Set objie = CreateObject("InternetExplorer.Application") objie.Visible = True objie.Navigate "URL" Do While objie.Busy Or objie.ReadyState < READYSTATE_COMPLETE Debug.Print objie.Busy; ":"; objie.ReadyState DoEvents Loop SendKeys "{Tab 17}{Enter}" Sleep 4000 SendKeys "{Tab 3}{Enter}" Sleep 9000 objie.Document.getElementById("purchaseOrders").Checked = True End Sub コード ``` チェックボックスがあるページまではいけるのですが、チェックボックスの要素を取得してチェックを入れるところが上手くいきません。 「オブジェクト変数またはWithブロック変数が設定されていません。」と表示されて、デバックをクリックすると「check.Click」が黄色でハイライトされます。 Dim check As HTMLInputElement Set check = objie.Document.getElementById("purchaseOrders") check.Click どこがおかしいかご教示いただけないでしょうか。 よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

以下にて、正常動作しますでしょうか。
objie.Document.getElementById("purchaseOrders").Checked = True

<追記>
もしかすると、ページ遷移が速すぎてオブジェクトを取得できていないのかもしれません。
以下のIEブラウザ待機処理を試してみてください。

VBA

1'IEブラウザ待機処理 2Private Sub IEwait(ByRef ie As InternetExplorer) 3 Dim timeout As Date 4 Dim cnt As Integer: cnt = 0 5 6 timeout = DateAdd("s", 50, Now()) 7 Do 8 'IE11対策でステータス連続50回一致確認 9 If ie.Busy = False And ie.readyState = 4 Then 'READYSTATE_COMPLETE = 4 10 DoEvents: DoEvents 11 cnt = cnt + 1 12 If cnt >= 50 Then 13 Exit Do 14 End If 15 Else 16 cnt = 0 'リセット 17 End If 18 'タイムアウトチェック 19 If timeout < Now() Then Exit Sub 20 DoEvents: DoEvents 21 Loop 22 23 timeout = DateAdd("s", 10, Now()) 24 Do While ie.Document.readyState <> "complete" 25 DoEvents: DoEvents 26 'タイムアウトチェック 27 If timeout < Now() Then Exit Do 28 Loop 29End Sub

投稿2020/07/24 07:35

編集2020/07/24 10:29
TanakaHiroaki

総合スコア1063

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

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

33sansan

2020/07/24 09:10

返信ありがとうございます。 同じエラーメッセージが出てしまいます。。
TanakaHiroaki

2020/07/24 09:24

デバック中、イミディエイトウィンドウで以下を実行すると何かわかるかもしれません。 Debug.Print TypeName(objie.document.getElementById("purchaseOrders")) Debug.Print objie.document.getElementById("purchaseOrders") Is Nothing
33sansan

2020/07/24 09:56

イミディエイトウィンドウに直接入れてエンターを押したところ、 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と表示されました。 何かやり方を勘違いしていたら申し訳ございません。
TanakaHiroaki

2020/07/24 10:13

よくわからないですね。 チェックボックスの要素取得に失敗しているように思います。
TanakaHiroaki

2020/07/24 10:30

IEブラウザ待機処理を工夫してみてください。コードを追記しました。
33sansan

2020/07/24 12:22

※質問にコード全体を追記しました。 ありがとうございます。 追記したコードの通り、一応既に一つのアクションごとに待機時間は長めにとっています。 仰る通り、要素取得に成功したことがないので、そこが原因だと思います。 タブキーが連続しているところも、Classで取得ができなかったので仕方なくそうしました。 コードのどこかに原因がありそうでしょうか?
TanakaHiroaki

2020/07/24 13:32

すみません。お手上げです。
33sansan

2020/07/24 16:00

大変お手数をおかけいたしました。 アドバイスいただき誠にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問