Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10全般 : その他)
On error gotoを入れてもエラーメッセージが表示され止まる場合の対処
投稿日時: 20/06/02 17:16:11
投稿者: Alice87

Microsoft Excel for Office 365を使用しています。
 
あるIE(https://www.smbc.co.jp/market/index.html)を開き、その画面内にあるリンクをクリックして表示して処理後に、開いたIEを全て閉じたいのが目的です。
そこで、方法をウェブ(https://ken3memo.hatenablog.com/entry/20090912/1252685423)で検索して下記コードを使ったのですがエラー発生時、次の処理に飛ぶよう「On error goto」を使用しましたが、エラーメッセージが表示されてしまいます。
 
「On Error Resume Next」を使用してもエラーメッセージが表示され、Microsoft Visual Basic for Applicationsをの「ツール」→「オプション」→「全般」タブの「エラートラップ」内の項目を切り替えたりしましたが同様です。
 
何が原因か思い当たらず、投稿させていただきました。
 
アドバイスをいただけると大変助かります。
 
宜しくお願い致します。
 
〜〜途中割愛〜〜
 
For n = objshell.Windows.Count To 1 Step -1
             
 Set objIE = objshell.Windows(n - 1)
                 
  On Error GoTo IE_owari
                     
   objIE.Quit ←ここでエラー発生。発生原因は対象となるIEを閉じ切ってしまっている為
Next
 
IE_owari:
 
  Application.DisplayAlerts = True
    
  Set objIE = Nothing
  Set objshell = Nothing

回答
投稿日時: 20/06/02 18:33:23
投稿者: takesi

オブジェクトのタイプなりネームなり確認できれば、IEかどうか判断する?

回答
投稿日時: 20/06/02 18:39:40
投稿者: WinArrow
投稿者のウェブサイトに移動

[ツール]-[オプション]の全般タブで
 エラートラップを”エラー発生時に中断”に
設定していませんか?
 

回答
投稿日時: 20/06/02 22:14:15
投稿者: simple

WinArrowさんのご指摘のとおりでしょう。
そのオプションは、プログラム開発時にデバッグ目的に使うものです。
平時に使うものではありません。
 
さて。

引用:
5/29に投稿して下さったコードを試してみました。
表示されるPDFは保存する必要はなかったので、記載されていた「objIE.Quit」で最初に開いた画面・リンクをクリックした後に表示される画面(別タブで表示)が閉じられるかを中心に見ましたが、最初に開いた画面しか閉じられなかった為、・・・

おっしゃることがわかりません。
5/29のコードでは、PDFファイルは開いていません。
最初の画面で、URLを取得して、そのPDFファイルをダイレクトにローカルに落としているだけです。
PDFを取得する処理が終わったので、IEを閉じています。
 
また、6/1のコメントで、
PDFへのリンクをクリックした場合において、
   objWin.ExecWB OLECMDID_CLOSE, 0  
を使って、その別タブの表示を閉じるコードを説明しています。
 
私の書いたことを理解して、コードを作ってもらえば(考え方はすべて書いています)、
所望のことができるはずです。
こちらもコードで試しながら発言しているわけですから、
他人のコメントをキチンと受け止めていただきたいですね。

投稿日時: 20/06/03 08:58:06
投稿者: Alice87

皆様
 
早速のアドバイスありがとうございます。
 
なぜか分からないのですが、特に修正をせずに本日リトライをしたらエラーが出ずに進めました。
 
WinArrow様
[ツール]-[オプション]の全般タブの設定は、「エラー処理対象外のエラーで中断」になっています。
 
simple様
再び書き込んで下さりありがとうございます。
 
6/1に記載して下さったコメントの下記の点ですが、「もっとも、上記は、くだんの銀行のサイトしか開いていない前提です。」とも記載があったので、こちらの方法はとりませんでした。
(他のサイトを開きっぱなしとも限らなかった為)
 
 objWin.ExecWB OLECMDID_CLOSE, 0
 
「 # 読んだあとで閉じたいだけなら、手で×印をクリックするのが最善手ではないですか?」のコメントもごもっともだったので。
 
 「objWin.ExecWB OLECMDID_CLOSE, 0」も試してみたので、どの方法をとるか考えたいと思います。