質問編集履歴
2
Exit forを間違っていた位置に戻し、最初の質問文に戻した。
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の位置を修正したが正常動作しない為、直前のコード(ダウンロード通知バーから開くコード)を追加で記載
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
|
-
(
|
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)に追記)
|