tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルコモンダイアログ(CommonDialog) を使って複数のファイルを開く
記事No11085
投稿日: 2008/01/08(Tue) 23:27
投稿者べた
コモン ダイアログ(CommonDialog) を使って複数のファイルを
開こうとしています。
コモンダイアログを表示し、ファイルを選択し、開くを押下した後、
選択したファイルのファイル数やパス名、ファイル名を取得したい
のですが、処理をどのようにしたらよいのですか。

選択されたファイルは、FileNameプロパティで取得できました。
「C:\Documents and Settings\yamada\My Documents file1.xls file2.xls file sample.xls test_data.csv」
の様に表示されました。

ファイル毎にパス名+ファイル名かと思っていたのですが、上記の
通り、最初にパス名来て、その後、選択したファイル名が来ています。
ファイル名とファイル名の区切りは、スペースではなく、null 文字 で区切
られた文字列として取得されるとヘルプにあったのですが、見た感じが
スペースなのですが、

期待する結果としては、
選択したファイルのファイル数
選択したファイルのパス名とファイル名
を取得したのです。
この場合、
 ファイル数:4
 パス名  :C:\Documents and Settings\yamada\My Documents
 ファイル名:file1.xls
      :file2.xls
      :file sample.xls (これだけ、ファイル名にスペースが含まれる〜
      :test_data.csv

CommonDialog1.Filter = "すべてのファイル(*.*)|*.*|テキストファイル(*.txt;*.csv)|*.txt;*.csv"
CommonDialog1.InitDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
CommonDialog1.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer
CommonDialog1.ShowOpen

[ツリー表示へ]
タイトルRe: コモンダイアログ(CommonDialog) を使って複数のファイルを開く
記事No11087
投稿日: 2008/01/09(Wed) 07:35
投稿者花ちゃん
下記ではだめですか?

Private Sub Command1_Click()
   With CommonDialog1
      .Filter = "すべてのファイル(*.*)|*.*|テキストファイル(*.txt;*.csv)|*.txt;*.csv"
      .InitDir = CreateObject("WScript.Shell").SpecialFolders("MyDocuments")
      .Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer
      .ShowOpen
   End With
  
   Dim MyFiles() As String
   Dim myString  As String
   Dim i         As Long
   myString = CommonDialog1.FileName
   MyFiles = Split(myString, vbNullChar)
   For i = LBound(MyFiles) To UBound(MyFiles)
       Debug.Print MyFiles(i)
   Next i
End Sub

[ツリー表示へ]
タイトルRe^2: コモンダイアログ(CommonDialog) を使って複数のファイルを開く
記事No11088
投稿日: 2008/01/09(Wed) 11:52
投稿者べた
ありがとうございます。
上手くいきました。

ただ、複数ファイル選択できる状態で、1ファイルしか選択し
開かなかったときは、この処理は、何もしませんでした。

Split()した後の配列の最大値を取得してその値で判断する
でしょうか。
それで、一応できましたが。

コモンダイアログのFlagsプロパティですが、フォーム上に配置
したとき、デフォルトで、複数ファイルを選択できないになって
いますが、この値は何が設定されているのでしょうか。
Debug.Printで参照すると「0」と表示されましたが、ヘルプで
調べたところ、該当する定数なり、値なり、それらしいものが
ありませんでした。
「0」でよろしいということでしょうか。また、定数とかは何に
なるのでしょうか。

[ツリー表示へ]
タイトルRe^3: コモンダイアログ(CommonDialog) を使って複数のファイルを開く
記事No11089
投稿日: 2008/01/09(Wed) 12:26
投稿者花ちゃん
> Split()した後の配列の最大値を取得してその値で判断する
> でしょうか。
そうですね。

> コモンダイアログのFlagsプロパティですが、フォーム上に配置
> したとき、デフォルトで、複数ファイルを選択できないになって
> いますが、この値は何が設定されているのでしょうか。
何も設定されていないからです。


> Debug.Printで参照すると「0」と表示されましたが、ヘルプで
> 調べたところ、該当する定数なり、値なり、それらしいものが
> ありませんでした。
> 「0」でよろしいということでしょうか。また、定数とかは何に
> なるのでしょうか。

複数選択しないなら、cdlOFNAllowMultiselect を設定しなければいいだけです。
足し算で 2+0 のように 0 を態々足す事はしませんよね。

CommonDialog1.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer
CommonDialog1.Flags = &H200 + &H80000
CommonDialog1.Flags = 512 + 524288

[ツリー表示へ]
タイトルRe^4: コモンダイアログ(CommonDialog) を使って複数のファイルを開く
記事No11090
投稿日: 2008/01/09(Wed) 12:36
投稿者べた
ありがとうございます。

[ツリー表示へ]