-PR-
解決済み

FileListBoxでの複数ファイル選択

  • 困ってます
  • 質問No.63023
  • 閲覧数492
  • ありがとう数6
  • 気になる数0
  • 回答数4
  • コメント数0

お礼率 54% (102/187)

FileListBoxコントロールのMultiSelectプロパティを「2-拡張」にして、
CtrlやShiftを併用することでファイルを複数選択できるようにしました。

とりあえず動作確認段階なので、ファイル選択状態でCommandButtonを押下することで、ファイル名を表示するようにしたいのですが、

Msgbox (File1.FileName) ※File1はFileListBoxコントロール名

では、当たり前の事ながら、(複数選択したうちの)1ファイルしか表示されません。FileNameプロパティにインデックスを付けるなど素人考えで色々当たってみたのですが、どうも上手くいきません。

選択した全てのファイル名をフルパスで取得したいのですが、何かいいテクニックはないでしょうか?
通報する
  • 回答数4
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.1
レベル11

ベストアンサー率 39% (129/327)

k_o_j_iさん、こんばんは!

Private Sub Drive1_Change()
Dir1.Path = Drive1.Drive
End Sub

Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub

Private Sub File1_PathChange()
Dir1.Path = File1.Path
End Sub

Private Sub Command1_Click()
For I = 0 To File1.ListCount - 1
If File1.Selected(I) Then Debug.Print Dir1.Path & "\" & File1.List(I)
Next I
End Sub

でフルパスで選択したファイル名が表示されます。
お礼コメント
k_o_j_i

お礼率 54% (102/187)

即座の回答どうもありがとうございます。
>For I = 0 To File1.ListCount - 1
>If File1.Selected(I) Then Debug.Print Dir1.Path & "\" & File1.List(I)
>Next I
ListBoxと同じやり方なのですね。
FileNameプロパティに拘泥しすぎてしまったようです。
実行してみたところ上手くいきました。

ところでここで取得したファイル名を1つずつ配列変数に格納したいのですが、
配列変数を宣言するときにはあらかじめ選択ファイル数がわかっている必要があります。
こういう場合は、やはりFor~Next文2回まわし(1回目で選択ファイル数取得、Redimでその数字を変数の次元に指定、2回目で配列変数に各ファイル名を格納)しかないのでしょうか?
出来ればループ処理は少なくしたいのですが……
投稿日時 - 2001-04-12 23:53:17
関連するQ&A
-PR-
-PR-

その他の回答 (全3件)

  • 回答No.2
レベル11

ベストアンサー率 46% (145/312)

たぶんVB6だと思いますが、ヘルプに書かれていませんか?キーワードは「Selected」です。 VB6は内容は全てヘルプに書かれています。 ヘルプに書かれていない内容は「サポート情報」を別にして誰にもわかりません。 ...続きを読む
たぶんVB6だと思いますが、ヘルプに書かれていませんか?キーワードは「Selected」です。
VB6は内容は全てヘルプに書かれています。
ヘルプに書かれていない内容は「サポート情報」を別にして誰にもわかりません。
補足コメント
k_o_j_i

お礼率 54% (102/187)

おっしゃるとおり、HELPに書かれていました。
下にも書きましたが、Selectedプロパティの例文が
ListBox主体に書かれていたので、気が付きませんでした。

>ヘルプに書かれていない内容は「サポート情報」を別にして
>誰にもわかりません。
VisualStudio6.0のHELPは確かに充実していますが、
「こういう処理をやりたい」という場合、
キーワードがわからないとかなり難渋するのが玉に瑕です……。
投稿日時 - 2001-04-12 23:54:07


  • 回答No.3
レベル11

ベストアンサー率 46% (145/312)

> ところでここで取得したファイル名を1つずつ配列変数に格納したいのですが、 > 配列変数を宣言するときにはあらかじめ選択ファイル数がわかっている必要があります。 > こういう場合は、やはりFor~Next文2回まわし(1回目で選択ファイル数取得、Redimでその数字を変数の次元に指定、2回目で配列変数に各ファイル名を格納)しかないのでしょうか? > 出来ればループ処理 ...続きを読む
> ところでここで取得したファイル名を1つずつ配列変数に格納したいのですが、
> 配列変数を宣言するときにはあらかじめ選択ファイル数がわかっている必要があります。
> こういう場合は、やはりFor~Next文2回まわし(1回目で選択ファイル数取得、Redimでその数字を変数の次元に指定、2回目で配列変数に各ファイル名を格納)しかないのでしょうか?
> 出来ればループ処理は少なくしたいのですが……
>
これもヘルプの Redimにのっていると思うのですが、preserveという宣言方法があります。
お礼コメント
k_o_j_i

お礼率 54% (102/187)

ご教授いただきどうもありがとうございます。
Redim preserve 変数(idx)
で、変数の内容を保持したまま、再定義が出来るんですね。

となると、やはり
Option Base 1
Dim strFileName()  As String
j = 1
For I = 0 To File1.ListCount - 1
  Redim Preserve strFileName(j)
  If File1.Selected(I) Then
    strFileName(j) = Dir1.Path & "\" & File1.List(I)
    j = j + 1
  End If
Next I

の様にループ内部でRedim Preserveを使うのが良さそうですね。
投稿日時 - 2001-04-13 21:22:18
  • 回答No.4
レベル11

ベストアンサー率 39% (129/327)

k_o_j_iさん、おはようございます。 選択ファイル数のプロパテイがあるかどうか、しりませんので、専門家の方、教えて下さい。 ReDim TBL(File1.ListCount) とその時の最大配列ではマズイのでしょうか? 選択した数の分だけの配列にしなくてはいけない理由がわかりませんが、 どうしてもそうであれば、2回ループでしょうね。 ループ処理を少なくしたいのであれば、 ...続きを読む
k_o_j_iさん、おはようございます。

選択ファイル数のプロパテイがあるかどうか、しりませんので、専門家の方、教えて下さい。

ReDim TBL(File1.ListCount)
とその時の最大配列ではマズイのでしょうか?

選択した数の分だけの配列にしなくてはいけない理由がわかりませんが、
どうしてもそうであれば、2回ループでしょうね。

ループ処理を少なくしたいのであれば、
ReDim TBL(j)
とループの中で ReDim する方法もあるけど、何か本末転倒のような気がします。
お礼コメント
k_o_j_i

お礼率 54% (102/187)

おはようございます!(もうすっかり晩ですが 笑)

>ReDim TBL(File1.ListCount)
>とその時の最大配列ではマズイのでしょうか?
割り当てられるメモリ量などは大したこと無いでしょうから、
それでもいいのですが、出来れば一旦配列変数に全選択ファイル名を格納して、
処理の前に「○個のファイルを処理します」といったメッセージを
入れたかったんです。

>ループ処理を少なくしたいのであれば、
>ReDim TBL(j)
>とループの中で ReDim する方法もあるけど、何か本末転倒のような気がします。
ループ2回まわしか、ループ内でRedim Preserveを使うか、の二者択一ですね。
とりあえず今回は後者採用でいってみたいと思います。
どうも色々とありがとうございました。
投稿日時 - 2001-04-13 21:24:40
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ