こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VBAに関して

VBA初心者のものです。あるプログラムを作成するために後で簡単に呼び出すことができるよう、始めにいくつかのブックのパス名をべつのものに置き換えたいのですが、例えば

Dim i As Integer, v As Integer
i = Application.InputBox("コピーしたいファイル数を記入してください", Type:=1)
For v = 1 To i
Dim wb(v) As Workbook
OpenFilename = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
Workbooks.Open fileName:=OpenFilename
Set wb(v) = ActiveWorkbook
wb(v).Close
Next v
こんな風に書くとwb()が配列なのでエラーになってしまいます。分かりにくい説明ですが、何か良い方法はないでしょうか?

投稿日時 - 2008-09-15 17:24:20

QNo.4330883

暇なときに回答ください

質問者が選んだベストアンサー

Dim wb() As Workbook
Dim i As Integer, v As Integer
Dim OpenFilename As String

i = Application.InputBox("コピーしたいファイル数を記入してください", Type:=1)
ReDim wb(1 To i)

For v = 1 To i
OpenFilename = Application.GetOpenFilename("Microsoft Excelブック,*.xls")
Workbooks.Open Filename:=OpenFilename
Set wb(v) = ActiveWorkbook
Debug.Print wb(v).Name '確認のため
wb(v).Close
Next v

こんな感じではどうでしょうか?

投稿日時 - 2008-09-15 17:41:36

お礼

なるほど、そういう風に書くことが可能なのかという感じです。使わせて頂きます、ありがとうございました。

投稿日時 - 2008-09-17 11:31:50

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

ついでですが、開きたいファイルが同じフォルダにある場合なら

Dim wb() As Workbook
Dim i As Integer, v As Variant
Dim OpenFilename As Variant

OpenFilename = Application.GetOpenFilename("Microsoft Excelブック,*.xls", , , , True) '複数のBookを指定する

ReDim wb(1 To 1): i = 1

For Each v In OpenFilename

Workbooks.Open Filename:=v
Set wb(i) = ActiveWorkbook
Debug.Print wb(i).Name '確認のため
wb(i).Close
i = i + 1
ReDim Preserve wb(1 To i)
Next v

初めに開きたい複数のファイルを選択して、同じ動作ができますよ。

投稿日時 - 2008-09-15 17:52:03

あなたにオススメの質問