Excel VBA 質問スレッド №1939 (解決済)

ファイルダイアログでファイル名のフィルタ

投稿者 : kzt     投稿日時 : 2024/06/21(Fri) 23:48:46     OS : Windows 10     EXCEL : Office 365
フォルダ内には(データ.txt、デモA01.txt、デモA02.txt、デモB10.txt、デモC01.txt、不備.txt・・・)のように複数のファイルが保存されています。
このフォルダからファイル名に「デモ」が含まれているもののみファイルダイアログに表示したいのですが、 InitialFileName = "*デモ*" では『検索条件に一致する項目はありません』となり、何も表示されません。

どのように処理すれば良いか、知恵をお貸しいただきたいです。
よろしくお願いいたします。


sub ファイル選択()

Dim FolderPath As String

    FolderPath = "C:\テストデータ"

    With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        .InitialFileName = FolderPath & "\*デモ*"

        If .Show = -1 Then
        
            '選択したファイルに対しての処理を記述

        End If
    End With

End sub

スポンサーリンク
[返信 1] Re : ファイルダイアログでファイル名のフィルタ
投稿者 : tek     投稿日時 : 2024/06/22(Sat) 09:23:32
  With Application.FileDialog(msoFileDialogFilePicker)
の間違いでは?

[返信 2] Re : ファイルダイアログでファイル名のフィルタ
投稿者 : kzt     投稿日時 : 2024/06/22(Sat) 12:19:06
tek様

ご指摘ありがとうございます。

msoFileDialogFilePicker に修正してみましたが、InitialFileNameを *デモ* で指定すると
同じように『検索条件に一致する項目はありません』となってしまいます。

[返信 3] Re : ファイルダイアログでファイル名のフィルタ
投稿者 : ピロリ     投稿日時 : 2024/06/22(Sat) 12:48:26
個人的には、
 With Application.FileDialog(msoFileDialogOpen)    にするも、
 With Application.FileDialog(msoFileDialogFilePicker)  にするも、
'選択したファイルに対しての処理を記述 する処理次第だと思いますが・・・

InitialFileName の件は、正直この辺りは勉強不足なので、少し調べてはみましたけれども、
類似の記事は見付けられませんでした。
これって Windows側のバグじゃね?と思いつつ、↓解決策って訳でもないですが・・・
(1)「データ.txt」など、「*デモ*」以外のファイルも表示されてしまいますけど、
  .InitialFileName = FolderPath & "\*デ*"   で、我慢するとか?
(2) 対象ファイルの名称を変更(「デモA01.txt」⇒「Demo_A01.txt」など)して、
  .InitialFileName = FolderPath & "\*Demo_*" とか、日本語以外で処理するとか?
(3) 対象ファイル「*デモ*」だけを別フォルダ(「Sub_Fold」など)へ移して、
  .InitialFileName = FolderPath & "\Sub_Fold"  で処理するとか?

他の方のご意見もお待ちいただけたらと思います。

[返信 4] Re : ファイルダイアログでファイル名のフィルタ
投稿者 : tek     投稿日時 : 2024/06/22(Sat) 19:18:21
失礼しました。漢字2文字でテストしていました。
"*デモ*"では何も表示されませんし、
  With Application.FileDialog(msoFileDialogFilePicker)
With Application.FileDialog(msoFileDialogOpen)
どちらも同じですね。

右上の検索窓に入れてあげれば結果表示されるようなので、ひと手間増えますが、検索窓にCtrl+Vするのはどうでしょう。
Sub ファイル選択()
    Dim InitialName As String
    Dim FolderPath As String
    
    InitialName = "*デモ*"
    With CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
        .Settext InitialName
        .PutInClipboard
    End With
    FolderPath = "C:\テストデータ"
    With Application.FileDialog(msoFileDialogFilePicker)
        .AllowMultiSelect = False
        .InitialFileName = FolderPath & "\" & InitialName
        If .Show = -1 Then
            '検索窓でCtrl+Vする
            
            '選択したファイルに対しての処理を記述

        End If
    End With

End Sub

[返信 5] Re : ファイルダイアログでファイル名のフィルタ
投稿者 : kzt     投稿日時 : 2024/06/23(Sun) 10:09:32
ピロリ様、tek様、ありがとうございました。

"*デ*"では表示されますけど"*モ*"では表示されないあたり、Windows側のバグの可能性が高いのかなと思いました。
いただいたアドバイスを試してみます。

本当にありがとうございました。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2025-07-02 20:07:42 )
タイトルとURLをコピーしました