回答編集履歴
1
コードの追加
    
        answer	
    CHANGED
    
    | @@ -3,4 +3,50 @@ | |
| 3 3 | 
             
            この、「IEで登録ページはもう開いておいて」の部分は、具体的にどういうことなのでしょう。
         | 
| 4 4 | 
             
            ユーザーが手作業で開くのでしょうか。それともVBAの別の処理で開くということでしょうか。
         | 
| 5 5 |  | 
| 6 | 
            -
            VBAでの自動登録ということなら、CreateObjectでIEを新規に開いて、そのIEで登録ページを開いて登録処理をすれば、既存のIEがどのページを開いていようが、関係ないと思いますが、そうできない理由はなんでしょうか。
         | 
| 6 | 
            +
            VBAでの自動登録ということなら、CreateObjectでIEを新規に開いて、そのIEで登録ページを開いて登録処理をすれば、既存のIEがどのページを開いていようが、関係ないと思いますが、そうできない理由はなんでしょうか。
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            追記
         | 
| 9 | 
            +
            ---
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            条件に合致するページが1枚だけのときに、処理を実行するということなら、
         | 
| 12 | 
            +
            合致するページをコレクションに格納して、その件数で処理を分けたらどうでしょう。
         | 
| 13 | 
            +
            (動的配列かDictionalyオブジェクトに格納する方法もありますが今回はコレクションで。)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
            ```vba
         | 
| 16 | 
            +
                Dim win As Object               '各ShellWindowを格納する
         | 
| 17 | 
            +
                Dim ie As InternetExplorer 
         | 
| 18 | 
            +
                Dim clIE As New Collection
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                '*-- 起動中のShellWindow一式を変数shに格納 --*
         | 
| 21 | 
            +
                Set sh = CreateObject("Shell.Application")
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                For Each win In sh.Windows
         | 
| 24 | 
            +
                    'ドキュメントタイトル取得失敗を無視(処理継続)--*
         | 
| 25 | 
            +
                    On Error Resume Next
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    If TypeName(win.document) = "HTMLDocument" Then
         | 
| 28 | 
            +
                        document_title = ""
         | 
| 29 | 
            +
                        document_title = win.document.Title
         | 
| 30 | 
            +
                        On Error GoTo 0
         | 
| 31 | 
            +
                        '*-- ページのタイトルで探す --*
         | 
| 32 | 
            +
                        Set ie = win
         | 
| 33 | 
            +
                        If InStr(document_title, "伝票番号入力") > 0 Then
         | 
| 34 | 
            +
                            clIE.Add IE '合致したページをコレクションに格納
         | 
| 35 | 
            +
                        Else
         | 
| 36 | 
            +
                            '*-- 画面を閉じる(登録画面以外のIE) --*
         | 
| 37 | 
            +
                            ie.Quit
         | 
| 38 | 
            +
                        End If
         | 
| 39 | 
            +
                    End If
         | 
| 40 | 
            +
                Next
         | 
| 41 | 
            +
             | 
| 42 | 
            +
            	Select Case clIE.Count
         | 
| 43 | 
            +
            	Case 0
         | 
| 44 | 
            +
            	    MsgBox "登録ページを開いてください。"
         | 
| 45 | 
            +
            	Case 1
         | 
| 46 | 
            +
            	    Set IE = clIE(1)
         | 
| 47 | 
            +
            	    '登録処理
         | 
| 48 | 
            +
            	Case Else
         | 
| 49 | 
            +
            	    MsgBox "IEは目的の1枚だけ開いておいてあとは閉じてください"
         | 
| 50 | 
            +
                        'ここでコレクション内のページを閉じる処理をいれるのもあり
         | 
| 51 | 
            +
            	End Select
         | 
| 52 | 
            +
            ```
         | 
