- ベストアンサー
Dir(OpenFileName(i))でファイル名が表示されない
VBAです。 Dir(OpenFileName(i))でファイル名が表示されません。 OpenFileName(i)はイミディエイトでフルパスが表示されています。 Dir関数を加えると結果空欄となってしまいます。 OpenFileNameを配列にする前はDir(OpenFileName)でファイル名が表示されました。OpenFileNameを配列にしOpenFileName(i)にしたところDir(OpenFileName(i))で空欄となってしまいます。なぜなのでしょうか?きっと単純なことの気がしますが‥ 助けてもらえないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
Sub Test() Dim OpenFileName As Variant Dim i As Byte OpenFileName = Application.GetOpenFilename("Microsoft Excelブック,*.xls", MultiSelect:=True) If IsArray(OpenFileName) Then For i = 1 To UBound(OpenFileName) Debug.Print Dir(OpenFileName(i)) Next End If End Sub ではどうでしょうか?
その他の回答 (1)
- DOUGLAS_
- ベストアンサー率74% (397/534)
[回答番号:No.1] の DOUGLAS_ です。 OpenFileName.Add Mypath & MyFile とのことですが、「Mypath」・「MyFile」の部分は、それぞれどのような内容になっているのでしょうか? 少なくとも、「Mypath & MyFile」のように合体させた結果が "D:\hoge\hoge.xls" のように 「ドライブ名」+「:\」+「フォルダ名」+「\」+「ファイル名」+「.xls」 というような形になっていなければなりません。 最後に拡張子「.xls」が付いていますでしょうか?
お礼
補足なのですが、別のプロシージャ上で Sub TEST() fff = Dir("C:\Sample\Sub\Book1.xls") MsgBox fff End Sub こんなのを試したところfffは空欄になってしまってます。ひえ~ 原因はなんなのでしょうか?
補足
DOUGLAS_さん。朝早くからお付き合い頂き感激です。 先に進めず困っておりました。 Mypath & MyFileは,カーソルをあてると "D:\TEST\明細書一覧3月\明細書一覧3月.xls" "D:\TEST\明細書一覧3月\明細書一覧4月.xls" "D:\TEST\明細書一覧3月\明細書一覧5月.xls" となっており イミディエイトに OpenFileName.Add Mypath & MyFileの結果 OpenFileName(i)には(例示だと1~3)と下記のとおり入っております。 D:\TEST\明細書一覧5月\明細書一覧3月.xls D:\TEST\明細書一覧4月\明細書一覧4月.xls D:\TEST\明細書一覧3月\明細書一覧5月.xls しかし、質問のように Dir(OpenFileName(i))は空欄になってしまいます。 感覚的には、順次 明細書一覧3月.xls 明細書一覧4月.xls 明細書一覧5月.xls となるはずと思うのですが、なにか間違っているとは思うのですが‥ 助けて下さい。
お礼
お手数かけました。下のお礼欄に補足で書かせて頂いたとおりありえない結果から、冷静になって考え直したところAおよびBという変数は2009.03という形になっており、Month(A)は当然3となり、ファイル名が食い違うため、存在しないのでした。よってDirでは空欄になってしまうのも当然でした。 やりたかったことは、例示ではDirにて明細書一覧2009.03月.xls~明細書一覧2009.05月.xlsを取り出したかったのですが、対象期間A~BからFor MM = Month(A) To Month(B)で月を取り出していては、元情報2009.03が3になって×でした。年度は固定ではないでしょうし、年を跨ぐこともあるでしょうし、A、Bの5桁目(年度の後の.)までは固定にし、MMをその下2桁に適応させるとしても3は03のようにしなければならないのと、AとBの間で年度が変わっている場合は、それぞれの月数から、中間の年度を判断させるしかないのでしょうか?なにか、シンプルな方法はないものでしょうか? 質問内容が変わりましたので、別スレにてお伺いいたします。 このような状態ですのでよろしければまたお力をお貸し下さい。 昨日の夜遅くと今朝の早くからお付き合い下さり、本当に有難うございました。YOKOKAMA46
補足
DOUGLAS_さん お付き合い下さり有難うございます。 http://okwave.jp/qa4963453.html の続きなのですが、以前はダイアログからDo~Loopで複数のファイルを取り出し処理(DOUGLAS_さんのご提示と同じような流れ)をして完成しているのですが、今回は対象期間から対象月を別途変数に取り込み、その変数をOpenFileName(i)に組み入れ順次ファイルを開きたいのです。しかし組み入れ方がまずいのか、うまく開くことが出来ないのです。Dir(OpenFileName(i))が空欄になってしまうのです。 ’Aは開始日、Bは終了日です Mcnt = Month(B) - Month(A) + 1 ReDim BN(1 To Mcnt) i = 0 For MM = Month(A) To Month(B) i = i + 1 BN(i) = MM Mypath = ThisWorkbook.Path & "\明細書一覧" & BN(i) & "月" MyFile = "\明細書一覧" & BN(i) & "月.xls" ’この後がまずいみたいで OpenFileName.Add Mypath & MyFile tmp = tmp & Dir(OpenFileName(i)) & vbCrLf Next MM '●選択したファイルの一覧化及び数量の表示 MsgBox vbCrLf & tmp & vbCrLf & "の全" & Mcnt & "枚です" & vbCrLf & "これらでよろしいですか? ", vbInformation, "選択したファイルは " というコードなのですが、Dir(OpenFileName(i))がうまくいかないのでこの後の、開く作業も閉じる作業も×なのです。非常に困っております。たすけて~