回答編集履歴

2

コメントの内容について追記

2018/11/27 14:43

投稿

imihito
imihito

スコア2166

test CHANGED
@@ -41,3 +41,61 @@
41
41
  `Application.UserControl`がTrueだと、ユーザーが操作中・操作する可能性がある、として自動終了しません。
42
42
 
43
43
  とはいえこちらには頼らず TanakaHiroaki さんの回答のように明示的に終了する処理を追加した方が良いでしょう。
44
+
45
+
46
+
47
+ ---
48
+
49
+
50
+
51
+ 181127:コメントの内容に関して追記
52
+
53
+
54
+
55
+ # Excelそのものを最前面に持ってくる方法
56
+
57
+
58
+
59
+ 経験上、Excel2010では`Excel.Application`オブジェクトの`Visible`プロパティをTrueにすることで最前面になりました。
60
+
61
+ しかし、Excel2013以降だとちょっと動作が怪しいことがありました。
62
+
63
+
64
+
65
+ そのため、`Visible`プロパティの操作はExcelが非表示なら表示にする程度にとどめておき、
66
+
67
+ ウィンドウを最前面にするための処理である`AppActivate`に`Excel.Application`オブジェクトの`Caption`プロパティを渡した方がより無難だと思われます。
68
+
69
+
70
+
71
+ また、Excel関連オブジェクトであればApplicationプロパティからApplicationオブジェクトは取得できるため
72
+
73
+
74
+
75
+ ```vba
76
+
77
+ Call VBA.AppActivate(objGet.Application.Caption)
78
+
79
+ ```
80
+
81
+
82
+
83
+ でよいはずです。
84
+
85
+
86
+
87
+ # VBAのAppActivateとWshShellのAppActivateの違い
88
+
89
+
90
+
91
+ 両者は一部動作が異なるため、場合によっては使い分けることがあります(今回のケースではVBAのAppActivateの方がコードがシンプルになるので良いでしょう)。
92
+
93
+
94
+
95
+ 具体的には、対象のウィンドウが見つからなかったときに、VBAのAppActivateはエラーが発生します。
96
+
97
+ 対してWshShellのAppActivateは、成功・失敗を返り値として返します。
98
+
99
+
100
+
101
+ ウィンドウが表示されるまで待機する、的な処理をしたい場合にはWshShellのAppActivateが適しているということになります。

1

コードのミスを修正

2018/11/27 14:43

投稿

imihito
imihito

スコア2166

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  Dim win As Excel.Window
26
26
 
27
- For Each win In objGet.Windows.Count
27
+ For Each win In objGet.Windows
28
28
 
29
29
  win.Visible = True
30
30