回答編集履歴
2
追記
answer
CHANGED
@@ -25,4 +25,42 @@
|
|
25
25
|
Dim new_wb As Workbook
|
26
26
|
Set new_wb = Workbooks.Open("ダウンロードしたブック名.csv")
|
27
27
|
Debug.Print new_wb.Name
|
28
|
-
```
|
28
|
+
```
|
29
|
+
|
30
|
+
追記
|
31
|
+
---
|
32
|
+
ループ処理の場合は、無限ループ対策を入れておいた方がいいでしょう。(試行回数を制限しておくとか)
|
33
|
+
また、別スレッドの終了(今回はブックを開く)を待つ場合は、ループ内に `DoEvents` を入れてOSに制御を返すようにします。
|
34
|
+
|
35
|
+
上記を考慮して、
|
36
|
+
|
37
|
+
```vba
|
38
|
+
|
39
|
+
'(4)自動で開かれたワークブックオブジェクトを取得する(★)
|
40
|
+
Dim wb As Workbook
|
41
|
+
Dim isFound As Boolean
|
42
|
+
isFound = False
|
43
|
+
|
44
|
+
Dim i As Long
|
45
|
+
For i = 1 To 1000 '試行回数1000回 適宜調整してください。
|
46
|
+
For Each wb In Workbooks
|
47
|
+
If wb.Name = "ダウンロードして開いたブック名.csv" Then
|
48
|
+
isFound = True
|
49
|
+
Exit For
|
50
|
+
End If
|
51
|
+
Next
|
52
|
+
If isFound Then Exit For
|
53
|
+
DoEvents
|
54
|
+
Next
|
55
|
+
|
56
|
+
If Not isFound Then
|
57
|
+
MsgBox "開いたブックを取得できませんでした。"
|
58
|
+
Exit Sub
|
59
|
+
End If
|
60
|
+
|
61
|
+
Debug.Print wb.Name
|
62
|
+
```
|
63
|
+
|
64
|
+
DoEvents を入れるだけではうまくいかない場合、Sleep か Application.Wait での待機をいれてみてください。
|
65
|
+
|
66
|
+
[【VBA入門】Sleep関数(API)やWaitメソッドで処理を止める方法 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト](https://www.sejuku.net/blog/37388)
|
1
説明追記
answer
CHANGED
@@ -11,4 +11,18 @@
|
|
11
11
|
Exit For 'ここだと1回目のループでループを抜けちゃいます。
|
12
12
|
Next
|
13
13
|
Loop
|
14
|
+
```
|
15
|
+
|
16
|
+
ただ、`Workbooks.Open` で開いているなら、下記で取得できるはずです。
|
17
|
+
|
18
|
+
```vba
|
19
|
+
Workbooks.Open "ANALYSIS.XLS"
|
20
|
+
Debug.Print ActiveWorkbook.Name
|
21
|
+
```
|
22
|
+
あるいは、
|
23
|
+
|
24
|
+
```vba
|
25
|
+
Dim new_wb As Workbook
|
26
|
+
Set new_wb = Workbooks.Open("ダウンロードしたブック名.csv")
|
27
|
+
Debug.Print new_wb.Name
|
14
28
|
```
|