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

回答編集履歴

2

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

2018/11/27 14:43

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -19,4 +19,33 @@
19
19
  > 質問2
20
20
 
21
21
  `Application.UserControl`がTrueだと、ユーザーが操作中・操作する可能性がある、として自動終了しません。
22
- とはいえこちらには頼らず TanakaHiroaki さんの回答のように明示的に終了する処理を追加した方が良いでしょう。
22
+ とはいえこちらには頼らず TanakaHiroaki さんの回答のように明示的に終了する処理を追加した方が良いでしょう。
23
+
24
+ ---
25
+
26
+ 181127:コメントの内容に関して追記
27
+
28
+ # Excelそのものを最前面に持ってくる方法
29
+
30
+ 経験上、Excel2010では`Excel.Application`オブジェクトの`Visible`プロパティをTrueにすることで最前面になりました。
31
+ しかし、Excel2013以降だとちょっと動作が怪しいことがありました。
32
+
33
+ そのため、`Visible`プロパティの操作はExcelが非表示なら表示にする程度にとどめておき、
34
+ ウィンドウを最前面にするための処理である`AppActivate`に`Excel.Application`オブジェクトの`Caption`プロパティを渡した方がより無難だと思われます。
35
+
36
+ また、Excel関連オブジェクトであればApplicationプロパティからApplicationオブジェクトは取得できるため
37
+
38
+ ```vba
39
+ Call VBA.AppActivate(objGet.Application.Caption)
40
+ ```
41
+
42
+ でよいはずです。
43
+
44
+ # VBAのAppActivateとWshShellのAppActivateの違い
45
+
46
+ 両者は一部動作が異なるため、場合によっては使い分けることがあります(今回のケースではVBAのAppActivateの方がコードがシンプルになるので良いでしょう)。
47
+
48
+ 具体的には、対象のウィンドウが見つからなかったときに、VBAのAppActivateはエラーが発生します。
49
+ 対してWshShellのAppActivateは、成功・失敗を返り値として返します。
50
+
51
+ ウィンドウが表示されるまで待機する、的な処理をしたい場合にはWshShellのAppActivateが適しているということになります。

1

コードのミスを修正

2018/11/27 14:43

投稿

imihito
imihito

スコア2166

answer CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  '注:objGet.IsAddinがTrueの時はobjGet.Windows.Countが0になるためこの方法では不可
13
13
  Dim win As Excel.Window
14
- For Each win In objGet.Windows.Count
14
+ For Each win In objGet.Windows
15
15
  win.Visible = True
16
16
  Next win
17
17
  ```