DIR関数を使ったファイル名の取得
おはようございます。
txtファイル名とdocファイル名を取得したく、以下のコードを作成してみました。
DIR関数を使って、ファイルリストボックスのPatternプロバディのように、複数の形式のファイル名を同時に取得する方法はあるのでしょうか?
是非、教えてください。よろしくお願いします。
-----------------------------
Private Sub Form_Load()
Dim MyName
MyName = Dir("C:\My Documents\*.txt")
Do While MyName <> ""
MsgBox MyName
MyName = Dir
Loop
MyName = Dir("C:\My Documents\*.doc")
Do While MyName <> ""
MsgBox MyName
MyName = Dir
Loop
End
End Sub
-------------------------------------
回答(3件)
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示
No.3ベストアンサー10pt
こんにちは!
もうできちゃったかな?
プロシージャを載せます。
私のは、拡張子はもう少し厳密にチェックしています。
サンプルを元にしているので、著作権の一部はマイクロソフトにあると思います。
リストボックス「list1」をフォームに貼り付けてやってみてください。
この例ではexeのあるフォルダにある*txt,*docをリストアップします。
Private Sub getFlist()
'■ ファイルのリストを取得する
Dim zMyp As String
Dim zFnm As String
Dim zName As String
Dim zKaks As String
Dim nFnm As Long
zMyp = App.Path & "\"
List1.Clear '# リストボックスを初期化する
zName = Dir(zMyp, vbNormal) '# 最初のファイル名を取得する
Do While zName <> "" '#ループ開始
'# 現在のフォルダと親フォルダは無視する
If zName <> "." And zName <> ".." Then
'# 普通のファイルかどうか
If (GetAttr(zMyp & zName) And vbNormal) = vbNormal Then
zFnm = UCase(zMyp & zName) '# パス+ファイル名
zKaks = Right(zFnm, 3) '# 拡張子
'## 拡張子のフィルタリングを行う
Select Case zKaks
Case "DOC", "TXT"
'# リストに追加!!
List1.AddItem zFnm
Case Else
'# その他のファイル
zFnm = ""
End Select
End If
End If
zName = Dir '# 次のファイル名を取得する
Loop
'# 取得したファイルの数
'nFs = List1.ListCount
End Sub
では!
この回答への補足
こんなにも詳しい解説付きのプロシージャを書いてくださいまして、なんてお礼を申したらよいのか・・・本当にありがとうございます。
今からコードを貼り付けて、実際に試してみます。明日・・・いや今日ですね(苦笑)今日中に結果報告させていただきます。
それでは、一旦失礼します、、、
この回答へのお礼
imogasi様、i-touch様、回答をくださいまして本当にありがとうございました。
(1)IF文で拡張子を区分する方法と(2)ファイルリストボックスで拡張子を区分する方法の両方を試してみました。
IEキャッシュの中からjpg・gifを取り出す作業をしてみたところ、(1)(2)ともに処理スピードはほぼ同じでした。
コードの記載は、ファイルリストボックス(visible=falseの状態)を使った方が楽で、把握しやすいことも分かりました。
imogasi様とi-touch様に対し、良回答の判断をしなければいけないのがとても心苦しかったです、、、、どうかお許しください。
今後もよろしくお願いします。
こんにちは
指定したフォルダ中の、ファイルのリストを取得するサンプルが、ヘルプで出てくると思います。
それを改造して、取得したファイル名から、IF文で、拡張子がdoc,txtのものだけリストに加えるようにすれば簡単ですよ。
私はリストボックスにAdditemで加えて、ファイルのリストを作っています。
では!
この回答へのお礼
回答していただき、ありがとうございます。返信が遅くなってしまい、申し訳ありません、、、
DIR関数で複数の指定拡張子のファイル名を取得し、リストビューコントロールに表示させようしていました。ファイル名の取得にDIR関数を使っていたため、ファイルリストボックスコントロールでの「File.Pattern = "*.txt;*.doc" 」のように一つの文章にできないものか悩んでいました。
「リストボックスにAdditemで加えて、ファイルのリストを作っています」
この方法の方が、処理も早そうですね。imogasiさんに上手にまとめたif文と合わせて試し、後日結果報告をさせていただきます。
No.1ベストアンサー20pt
VBのForm1の上にドライブ、ディレクトリ、ファイルリストボックスを
貼りつけ、それぞれのコントロールをダブルクリックして
Private Sub Drive1_Change()
Dir1.Path=Drive1.Drive
End Sub
Private Sub Dir1_Change()
File1.Path = Dir1.Path
File1.Pattern = "*.txt;*.doc"
End Sub
Private Sub File1_Click()
flnam= File1.FileName
MsgBox flnam
End Sub
と入力して見ました。実行すると
ファイルリストボックスに拡張子が「txt」と「doc」の2つが
現われます。そしてクリックして指定したファイル名が
MsgBoxに現われます。
本件の質問は、この「Pattern」プロパティと、拡張子を列記する
方法「;」に付いての質問ではないのでしょうか。
「Pattern」の語が出ているので多分ご存知の様子ですね。
-----
またDir関数で下記を実行してみました。ご参考になれば。
Private Sub Form_Click()
a = Dir("c:\My Documents\*.*")
For i = 1 To 40
a = Dir()
a = Trim(a)
b = Right(a, 4)
If b = ".doc" Then
Form1.Print a
ElseIf b = ".txt" Then
Form1.Print a
End If
Next i
End Sub
仮に繰り返し回数を「40」としていますが、ファイル数より回数が進んだ時の「エラーの検知方法」が思い出せず不完全です。すみません。全般について、ご存知の方やダメな点を私も教わりたいです。
この回答への補足
imogasi様、i-touch様、回答をくださいまして本当にありがとうございました。
(1)IF文で拡張子を区分する方法と(2)ファイルリストボックスで拡張子を区分する方法の両方を試してみました。
IEキャッシュの中からjpg・gifを取り出す作業をしてみたところ、(1)(2)ともに処理スピードはほぼ同じでした。
コードの記載は、ファイルリストボックス(visible=falseの状態)を使った方が楽で、把握しやすいことも分かりました。
imogasi様とi-touch様に対し、良回答の判断をしなければいけないのがとても心苦しかったです、、、、どうかお許しください。
今後もよろしくお願いします。
この回答へのお礼
親身な回答していただき、本当にありがとうございます。
DIR関数の拡張子指定も"*.txt;*.doc" のようにできるればと思っていたのですが、imogasi様のようにIF文を使った方が無難そうですね。
リストビューコントロールにIEキャッシュ内のファイルの一覧を表示させようとしていました。DIR関数にこだわっていたのですが、ファイルリストボックスを表示させない形で利用した方が良いかな・・・
imogasi様のアドバイスを参考にもう一度挑戦してみようと思います。
- 最新から表示
- |
- 回答順に表示
- |
- ベストアンサーのみ表示












