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

質問編集履歴

2

Exit forを間違っていた位置に戻し、最初の質問文に戻した。

2020/12/23 12:05

投稿

koyamashinji
koyamashinji

スコア45

title CHANGED
File without changes
body CHANGED
@@ -60,8 +60,8 @@
60
60
  If wb.Name = "ダウンロードして開いたブック名.csv" Then
61
61
  Set new_wb = Workbooks("ダウンロードして開いたブック名.csv")
62
62
  isFound = True
63
- Exit For
64
63
  End If
64
+ Exit For
65
65
  Next
66
66
  Loop
67
67
 

1

20-12-23追記 - Exit forの位置を修正したが正常動作しない為、直前のコード(ダウンロード通知バーから開くコード)を追加で記載

2020/12/23 12:05

投稿

koyamashinji
koyamashinji

スコア45

title CHANGED
File without changes
body CHANGED
@@ -3,45 +3,78 @@
3
3
  それ以前は動作OKです。
4
4
 
5
5
 
6
- 社内のサイトに行く
6
+ (1)社内のサイトに行く
7
7
 
8
- Excelファイル(正確には拡張子`.csv`)をダウンロードする
8
+ (2)Excelファイル(正確には拡張子`.csv`)をダウンロードする
9
9
 
10
- ダウンロードしたExcelファイルを開く
10
+ (3)「ダウンロード通知バー」の「開く」を自動で押て、ダウンロードしたExcelファイルを開く
11
11
 
12
- 自動で開かれたワークブックオブジェクトを取得する(★)
12
+ (4)自動で開かれたワークブックオブジェクトを取得する(★)
13
13
 
14
14
  ***
15
-
16
- 下記、(★)部分のコードです。
17
15
  ### コード
18
16
  ```
19
17
 
18
+ '(1)
19
+ (省略)
20
20
 
21
+
22
+ '(2)
21
23
  (省略)
22
24
 
23
25
 
24
- Excelデをダウンロードし、ブックを開くコード)'動作OK
26
+ '3)「ダウンロド通知バー」の「開く」自動で押して、ダウンロードしたExcelファイルを開く
27
+ Dim o As IUIAutomation
28
+ Dim e As IUIAutomationElement
29
+ Set o = New CUIAutomation
30
+ Dim h As LongPtr
31
+ h = ie.hwnd
32
+ h = FindWindowEx(h, 0, "Frame Notification Bar", vbNullString)
33
+ If h = 0 Then Exit Sub
34
+
35
+ Set e = o.ElementFromHandle(ByVal h)
36
+ Dim iCnd As IUIAutomationCondition
37
+ Set iCnd = o.CreatePropertyCondition(UIA_NamePropertyId, "ファイルを開く")
38
+
39
+ Dim Button As IUIAutomationElement
40
+ Dim InvokePattern As IUIAutomationInvokePattern
41
+
42
+ While InvokePattern Is Nothing
43
+ DoEvents
44
+ Set Button = e.FindFirst(TreeScope_Subtree, iCnd)
45
+ Set InvokePattern = Button.GetCurrentPattern(UIA_InvokePatternId)
46
+ Wend
47
+ InvokePattern.Invoke
48
+
25
49
 
26
50
 
27
- '対象のブックは、すぐには開かず、完全に開くまで数秒のタイムラグがある
28
51
 
29
-
30
- '以下のループで、自動で開かれたブックを取得したい
52
+ '(4)自動で開かれたワークブックオブジェクトを取得する(★)
31
53
  Dim wb As Workbook
32
54
  Dim new_wb As Workbook
33
55
  Dim isFound As Boolean
34
56
  isFound = False
35
57
 
36
- Do Until isFound = True
58
+ Do Until isFound = True
37
59
  For Each wb In Workbooks
38
60
  If wb.Name = "ダウンロードして開いたブック名.csv" Then
39
61
  Set new_wb = Workbooks("ダウンロードして開いたブック名.csv")
40
62
  isFound = True
63
+ Exit For
41
64
  End If
42
- Exit For
43
65
  Next
44
66
  Loop
45
67
 
46
68
  Debug.Print (wb.Name) 'ブック名が取得できていない
47
- ```
69
+ ```
70
+ ### 追記 12/23 - Exit forの位置を修正したが取得できずフリーズする
71
+ hatena様のご指摘`Exit for`の位置を修正の上、**再度コードを実行したところ、
72
+ 呼び出し側のExcelファイルがフリーズしたままになってしまいます**。
73
+ (エラーは吐かないが、無限ループしている?)
74
+
75
+ 但し、上記コード ■ 部分にブレークポイントを設定し、
76
+ ■以降をステップイン実行すると、問題なくwb.Nameが取得できます。
77
+
78
+ 気になる点としては、(3)ダウンロードファイルを開く際に
79
+ **「ダウンロード通知バー」から「開く」を押している点です**
80
+ (コードは、上記コードブロック中(3)に追記)