回答編集履歴

3

さらにコード追加

2019/10/16 04:26

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -103,3 +103,95 @@
103
103
 
104
104
 
105
105
  処理の部分が長いなら、関数に分割するといいでしょう。
106
+
107
+
108
+
109
+ ---
110
+
111
+
112
+
113
+ SelectedItemsに対してはForで回せば、ファイルが存在しないということは通常はあり得ないですか、
114
+
115
+ 処理途中で削除されたとか、排他ロックさていて開けないとか、ファイルが壊れていて開けないとか、、、
116
+
117
+ いろいろあると思いますので、その場合のエラー処理も追加したコード例
118
+
119
+
120
+
121
+ ```vba
122
+
123
+ Public Sub OpenBooks()
124
+
125
+
126
+
127
+ With Application.FileDialog(msoFileDialogOpen)
128
+
129
+ .AllowMultiSelect = True
130
+
131
+ .Filters.Clear
132
+
133
+ .Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1
134
+
135
+ .Title = "ワークブックを開く"
136
+
137
+
138
+
139
+ If Not .Show Then Exit Sub
140
+
141
+
142
+
143
+ Dim SelectedBook As Variant
144
+
145
+ For Each SelectedBook In .SelectedItems
146
+
147
+ Call ProcessToBook(ProcessToBook)
148
+
149
+ Next
150
+
151
+ End With
152
+
153
+
154
+
155
+ End Sub
156
+
157
+
158
+
159
+ Public Sub ProcessToBook(BookName As String)
160
+
161
+ Dim wb As Workbook
162
+
163
+ Set wb = Workbooks.Open(BookName)
164
+
165
+ If Err.Number <> 0 Then
166
+
167
+ MsgBox Err.Description
168
+
169
+ ProcessToBook = False
170
+
171
+ Exit Sub
172
+
173
+ End If
174
+
175
+ On Error GoTo 0
176
+
177
+
178
+
179
+ 'ここにブックへの処理を記述
180
+
181
+ 'これ以降でエラー処理が必要なら、上記のブックが開けなかった場合のエラー処理とは別に
182
+
183
+ ’ここからOn Error を記述
184
+
185
+
186
+
187
+ wb.Close: Set wb = Nothing
188
+
189
+ End Sub
190
+
191
+ ```
192
+
193
+
194
+
195
+ この辺りはいろいろ好みがあると思いますので、自分が書くならというコード例です。
196
+
197
+ 参考までに。

2

コード追記

2019/10/16 04:26

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -51,3 +51,55 @@
51
51
  End Sub
52
52
 
53
53
  ```
54
+
55
+
56
+
57
+ コード例2
58
+
59
+ For Each でループしてみました。個人的にはこちらの方が読みやすいと思います。
60
+
61
+
62
+
63
+ ```vba
64
+
65
+ Public Sub OpenBooks2()
66
+
67
+
68
+
69
+ With Application.FileDialog(msoFileDialogOpen)
70
+
71
+ .AllowMultiSelect = True
72
+
73
+ .Filters.Clear
74
+
75
+ .Filters.Add "Excelブック", "*.xls; *.xlsx; *.xlsm", 1
76
+
77
+ .Title = "ワークブックを開く"
78
+
79
+
80
+
81
+ If Not .Show Then Exit Sub
82
+
83
+
84
+
85
+ Dim SelectedBook As Variant
86
+
87
+ For Each SelectedBook In .SelectedItems
88
+
89
+ Workbooks.Open SelectedBook
90
+
91
+ ' 処理
92
+
93
+ Next
94
+
95
+ End With
96
+
97
+
98
+
99
+ End Sub
100
+
101
+ ```
102
+
103
+
104
+
105
+ 処理の部分が長いなら、関数に分割するといいでしょう。

1

コード追記

2019/10/16 02:21

投稿

hatena19
hatena19

スコア34073

test CHANGED
@@ -3,3 +3,51 @@
3
3
 
4
4
 
5
5
  SelectedItemsにファイル名が格納されているので、それに対して、Forループで回して処理すればいいのでは。
6
+
7
+
8
+
9
+ ---
10
+
11
+ コード例
12
+
13
+
14
+
15
+ ```vba
16
+
17
+ Public Sub OpenBooks()
18
+
19
+
20
+
21
+ With Application.FileDialog(msoFileDialogOpen)
22
+
23
+ .AllowMultiSelect = True
24
+
25
+ .Filters.Clear
26
+
27
+ .Filters.Add Description:="全てのファイル", Extensions:="*.*"
28
+
29
+ .Title = "ファイルを開く"
30
+
31
+
32
+
33
+ If Not .Show Then Exit Sub
34
+
35
+
36
+
37
+ Dim i As Integer
38
+
39
+ For i = 1 To .SelectedItems.Count
40
+
41
+ Workbooks.Open strFiles(i)
42
+
43
+ ' 処理i
44
+
45
+ Next
46
+
47
+ End With
48
+
49
+
50
+
51
+ End Sub
52
+
53
+ ```