teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

コードの追加

2018/03/27 06:59

投稿

hatena19
hatena19

スコア34367

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
+ ```