4

いくつかの .txt ファイルを含むディレクトリがあります。まあ言ってみれば

hi.txt
hello.txt
hello_test.txt
test.txt

VBA でファイル ダイアログを使用して、"*test.txt" に一致するファイル (つまり、最後の 2 つ) のみをドロップダウンに表示するようにフィルター処理するにはどうすればよいですか? または、* のみを使用できますか。フィルター?

以下は動作するはずですが、動作しません:

Sub TestIt()
   Dim test As Variant 'silly vba for not having a return type..
   test = Application.GetOpenFilename(FileFilter:="test (*test.txt), *test.txt")
End Sub

編集:これが明確でない場合の明確化:「 .txt」ファイルの代わりに「test.txt」をフィルター処理して、セレクターで hello_test.txt と test.txt からのみ選択できるようにします。

4

3 に答える 3

3

ファイルダイアログはどうですか?

Dim dlgOpen As FileDialog
Set dlgOpen = Application.FileDialog(msoFileDialogOpen)
With dlgOpen
    .AllowMultiSelect = True
    .InitialFileName = "Z:\docs\*t*.*x*"
    .Show
End With

http://msdn.microsoft.com/en-us/library/aa213120(v=office.11​​).aspx

于 2012-05-18T19:51:33.593 に答える
2

これはあなたがしようとしていることですか?これをモジュールに貼り付けて、サブを実行しますOpenMyFile

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
    lStructSize       As Long
    hwndOwner         As Long
    hInstance         As Long
    lpstrFilter       As String
    lpstrCustomFilter As String
    nMaxCustFilter    As Long
    nFilterIndex      As Long
    lpstrFile         As String
    nMaxFile          As Long
    lpstrFileTitle    As String
    nMaxFileTitle     As Long
    lpstrInitialDir   As String
    lpstrTitle        As String
    flags             As Long
    nFileOffset       As Integer
    nFileExtension    As Integer
    lpstrDefExt       As String
    lCustData         As Long
    lpfnHook          As Long
    lpTemplateName    As String
End Type

Sub OpenMyFile()
    Dim OpenFile As OPENFILENAME
    Dim lReturn As Long
    Dim strFilter As String

    OpenFile.lStructSize = Len(OpenFile)

    '~~> Define your filter here
    strFilter = "Text File (*test.txt)" & Chr(0) & "*test.txt" & Chr(0)

    With OpenFile
        .lpstrFilter = strFilter
        .nFilterIndex = 1
        .lpstrFile = String(257, 0)
        .nMaxFile = Len(.lpstrFile) - 1
        .lpstrFileTitle = .lpstrFile
        .nMaxFileTitle = .nMaxFile
        .lpstrInitialDir = "C:\Users\Siddharth Rout\Desktop\"
        .lpstrTitle = "My FileFilter Open"
        .flags = 0
    End With

    lReturn = GetOpenFileName(OpenFile)

    If lReturn = 0 Then
        '~~> User cancelled
        MsgBox "User cancelled"
    Else
        MsgBox "User selected" & ":=" & OpenFile.lpstrFile
        '
        '~~> Rest of your code
        '
    End If
End Sub
于 2012-05-18T21:34:14.057 に答える