回答編集履歴

1

コードの追加

2018/03/27 06:59

投稿

hatena19
hatena19

スコア33782

test CHANGED
@@ -9,3 +9,95 @@
9
9
 
10
10
 
11
11
  VBAでの自動登録ということなら、CreateObjectでIEを新規に開いて、そのIEで登録ページを開いて登録処理をすれば、既存のIEがどのページを開いていようが、関係ないと思いますが、そうできない理由はなんでしょうか。
12
+
13
+
14
+
15
+ 追記
16
+
17
+ ---
18
+
19
+
20
+
21
+ 条件に合致するページが1枚だけのときに、処理を実行するということなら、
22
+
23
+ 合致するページをコレクションに格納して、その件数で処理を分けたらどうでしょう。
24
+
25
+ (動的配列かDictionalyオブジェクトに格納する方法もありますが今回はコレクションで。)
26
+
27
+
28
+
29
+ ```vba
30
+
31
+ Dim win As Object '各ShellWindowを格納する
32
+
33
+ Dim ie As InternetExplorer
34
+
35
+ Dim clIE As New Collection
36
+
37
+
38
+
39
+ '*-- 起動中のShellWindow一式を変数shに格納 --*
40
+
41
+ Set sh = CreateObject("Shell.Application")
42
+
43
+
44
+
45
+ For Each win In sh.Windows
46
+
47
+ 'ドキュメントタイトル取得失敗を無視(処理継続)--*
48
+
49
+ On Error Resume Next
50
+
51
+
52
+
53
+ If TypeName(win.document) = "HTMLDocument" Then
54
+
55
+ document_title = ""
56
+
57
+ document_title = win.document.Title
58
+
59
+ On Error GoTo 0
60
+
61
+ '*-- ページのタイトルで探す --*
62
+
63
+ Set ie = win
64
+
65
+ If InStr(document_title, "伝票番号入力") > 0 Then
66
+
67
+ clIE.Add IE '合致したページをコレクションに格納
68
+
69
+ Else
70
+
71
+ '*-- 画面を閉じる(登録画面以外のIE) --*
72
+
73
+ ie.Quit
74
+
75
+ End If
76
+
77
+ End If
78
+
79
+ Next
80
+
81
+
82
+
83
+ Select Case clIE.Count
84
+
85
+ Case 0
86
+
87
+ MsgBox "登録ページを開いてください。"
88
+
89
+ Case 1
90
+
91
+ Set IE = clIE(1)
92
+
93
+ '登録処理
94
+
95
+ Case Else
96
+
97
+ MsgBox "IEは目的の1枚だけ開いておいてあとは閉じてください"
98
+
99
+ 'ここでコレクション内のページを閉じる処理をいれるのもあり
100
+
101
+ End Select
102
+
103
+ ```