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

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

ただいまの
回答率

90.51%

  • VBA

    2309questions

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

「IE」ページ遷移と、未だに解らないオブジェクトの取得と解放

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 6,323

naow9y

score 12

前回の2つの質問で、

「DOMのコントロール(エレメント操作)について」

ですが、Aタグを検索後に別ページに飛んでから別オブジェクトを作成して
同じように操作を出来るように書いているのですが、

'オブジェクト名に2を付けて、Aタグを操作

でAタグを全く取得できません。なぜでしょうか

Private Sub CommandButton3_Click()
    Dim ie As InternetExplorer
    
    Set ie = CreateObject("InternetExplorer.Application")
    ie.Visible = True
    ie.Navigate "http://www.xxx.jp/a/auth"
    Do While ie.Busy Or ie.ReadyState < READYSTATE_COMPLETE
        DoEvents
    Loop
    
    ie.document.all("login_id").Value = Range("C8")
    ie.document.all("password").Value = Range("C9")
    ie.document.forms(0).submit
    
    
    Application.Wait (Now + TimeValue("00:00:05"))
    
    
    'ログイン後のページの中から、Aタグを見つけてクリック
    Set objShell = CreateObject("Shell.Application")
    Set ie2 = objShell.Windows(objShell.Windows.Count - 1)
    
    Dim objA As Object   'Aタグ格納用
    For Each objA In ie2.document.all.tags("A")  'Aのタグを.allから抜く
        MsgBox "Aタグテキスト名:" & objA.innerText  '確認できたら消す
        If objA.innerText = "お知らせ" Then '.InnerTEXT値(リンクの名称) で判断する
            objA.Click  '見つけたButtonオブジェクト(ボタン)を.Clickクリックする
            Exit For  '用が済んだので(見つかったので)ループを抜ける
        End If
    Next
    
    Set objA = Nothing  'オブジェクト変数解放
    
    Application.Wait (Now + TimeValue("00:00:10"))

    'クリック後のページ移動後の為の新しいオブジェクト
    Set objShell2 = CreateObject("Shell.Application")
    Set ie3 = objShell2.Windows(objShell2.Windows.Count - 1)
    
  'オブジェクト名に2を付けて、Aタグを操作
    Dim objA2 As Object   'Aタグ格納用
    For Each objA2 In ie3.document.all.tags("A")    'Aのタグを.allから抜く
        MsgBox "Aタグテキスト名:" & objA2.innerText    'コメントの通り出来てるか確認
            Exit For    'ループを抜ける
    Next
    
    Set objA2 = Nothing  'オブジェクト変数解放

    'submitボタンをクリック
    'objForm.submit

End Sub

単に、前のオブジェクトをそのまま流用して、確認の表示がされないのはIF文が入っていないせいでしょうか。


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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

check解決した方法

0

失礼しました。自己解決しました。オブジェクトの変更も必要なくIF文が入る事によって、FOR文内のMsgBoxがとまる事が確認出来ました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • VBA

    2309questions

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