Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


303 / 13645 ツリー ←次へ | 前へ→

【81097】起動済みIEを操作 けんじ 19/10/17(木) 18:14 質問[未読]
【81105】Re:起動済みIEを操作 とおりすがり 19/10/30(水) 5:22 回答[未読]

【81097】起動済みIEを操作
質問  けんじ  - 19/10/17(木) 18:14 -

引用なし
パスワード
   IEで起動済みの画面にエクセルの特定のセルの値を反省させたいです。
下記、ネットから参考にしたのですが
最後のie.document〜のところで
オブジェクト変数またはwithブロック変数が設定されていません。と出ました。
原因分かりますでしょうか?

Sub test()
  Dim ie As InternetExplorer
  Dim sh As Object
  Dim win As Object
  Dim DocumentTitle As String
  
  Set sh = CreateObject("Shell.Application")
  
  For Each win In sh.Windows
    DocumentTitle = ""
    On Error Resume Next
    DocumentTitle = win.document.title
    On Error GoTo 0
    If DocumentTitle = "" Then
      Set ie = win
      Exit For
    End If
  Next
  
  ie.document.getElementsByTagName("TITLE")(0).innerText = ""

End Sub

【81105】Re:起動済みIEを操作
回答  とおりすがり  - 19/10/30(水) 5:22 -

引用なし
パスワード
   もう見てないかもしれないですが。

原因は「If DocumentTitle = "" Then」のところで、DocumentTitleを空白にしているために、
IEを判別できていないのだと思います。

取得しているシェルのうち、IEではないものは基本的にdocument.titleを持っていない=DocumentTitleが空白になります。
その結果、IEでないものが「If DocumentTitle = "" Then」の条件に一致してしまっている状態です。
(説明下手ですね。ごめんなさい。)

操作したいページのTitleタグの部分を指定すればいいんだと思いますが、
もしかしたらそのページはTitleタグの部分が空白になっているということですかね。

だとしたら、別のアプローチですが、下記ではどうでしょうか。
(もしたくさんタブを開いている状態だとしたら、タブを判別するためにもう一工夫必要かもしれません)

Sub test()

  Dim ie As InternetExplorer
  Dim sh As Object
  Dim win As Object
  Dim DocumentTitle As String

Set sh = CreateObject("Shell.Application")

  For Each win In sh.Windows
    If TypeName(win.document) = "HTMLDocument" Then
      Set ie = win
      Exit For
    End If
  Next
  
  ie.document.getElementsByTagName("TITLE")(0).innerText = ""

End Sub

303 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free