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

解決済みの質問

複数のエクセルファイルを順番に開く

Excel2003、OS WindowsXPを使用し、Visual Basicに関する質問です。
下記マクロを作成したのですが、これですとファイルを複数選択した場合に毎回開く順番がランダムになってしまいます。これをファイル名を参照して順番に開くようにしたいのです。
因みにファイル名は **-***_AAA_日付.xls です。
*には数字が入り、AAAには漢字による名称が入ります。

例)(1)24-002、(2)24-005、(3)24-008といった3つのファイルを開くとします。現在ですと(3)→(1)→(2)のような順番で開きますが、これを(1)→(2)→(3)のようにファイル名の数字をkeyとして順番に開きたいのです。

色々と調べてみたのですが、よく分かりませんでした…。
すみませんが、ご回答の程、宜しくお願い致します。


Opf = ThisWorkbook.Path & "\注文書・請書"
ChDrive ThisWorkbook.Path
ChDir Opf

'ファイルを開くダイアログを開く
vntFileName = _
Application.GetOpenFileName( _
FileFilter:="エクセルファイル(*.xls),*.xls" _
, FilterIndex:=1 _
, Title:="ファイル選択" _
, MultiSelect:=True _
)


'ファイルが選択されているとき(vntFileNameが配列型)は
'選択した全てのファイルをWorkbooks.Openメソッドを使い開く

If IsArray(vntFileName) Then
For Each vntGetFileName In vntFileName
Workbooks.Open vntGetFileName
Next
Else
Exit Sub
End If

投稿日時 - 2012-03-16 14:03:31

QNo.7365367

困ってます

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

ソートするしかないのでは。

---

If IsArray(vntFileName) Then

aryFileName = mSort(vntFileName)

For i = 0 to ubound(aryFileName) - 1
Workbooks.Open aryFileName(i)
Next
Else
Exit Sub


function mSort(aryw) as variant
'ソートPG省略
mSort = ソート後
end function

投稿日時 - 2012-03-16 16:26:22

補足

ご回答ありがとうございます。
For i = 0 to ubound(aryFileName) - 1
の箇所で実行時エラー13となり型が一致しないと表示されますが、原因が分かりません。
度々すみませんが、ご教示頂けますでしょうか…。

投稿日時 - 2012-03-16 16:57:46

お礼

For i = 0 to ubound(aryFileName) - 1
の箇所を修正し、ソート部分で一部修正を行い動くようになりました。
これからもっと勉強していきたいと思います。
どうもありがとうございました。

投稿日時 - 2012-03-22 09:47:16

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

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

回答(3)

ANo.3

>mSort = aryw とした場合にも同じくaryFILENameはemptyとなってしまいます。

なにもせず内容を入れ替えているだけでemptyになるのは

変数の綴りがあってないのでは。

先頭にOption Explicitステートメントを付加するとか

ステップ実行で追跡するとかでしょうか。

あとはソートをモジュール化せず


If IsArray(vntFileName) Then

'ソートロジック

For i = 0 to ubound(aryFileName) - 1

こうするか試行錯誤してください。


こういうバグを追跡することもレベルアップにつながります。

投稿日時 - 2012-03-22 08:50:39

ANo.2

>aryFileName = mSort(vntFileName)

ソートからの戻った時aryFileNameに配列が格納されていますか?

あとソートせず

function mSort(aryw as variant) as variant
mSort = aryw
end function

とそのまま返してもエラーになりますか。

投稿日時 - 2012-03-16 17:31:38

補足

職場から質問していたため、休日に入り連絡が遅くなりすみませんでした。
>aryFileName = mSort(vntFileName)
aryFILENameはemptyとなってしまいます。

又、mSort = aryw とした場合にも同じくaryFILENameはemptyとなってしまいます。
この場合、Workbooks.Open aryFileName(p)において実行時エラー9と表示されます。

投稿日時 - 2012-03-21 09:13:07

あなたにオススメの質問