【问题标题】:VBA Dialogue FileFilter Partial File NameVBA 对话文件过滤器部分文件名
【发布时间】:2012-05-18 19:34:19
【问题描述】:

我有一个包含多个 .txt 文件的目录。比方说

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

在 VBA 中使用文件对话框,如何过滤以在下拉列表中仅显示“*test.txt”匹配文件(即最后两个)?或者我只能使用 *.过滤器?

以下似乎应该有效,但无效:

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

编辑:澄清以防不清楚:我想过滤“test.txt”而不是“.txt”文件,所以我只能从 hello_test.txt 和 test.txt 中选择在选择器中。

【问题讨论】:

    标签: vba filesystems


    【解决方案1】:

    我看到您担心将文本放入文件名框中,但这正是您需要做的,并且似乎是您的情况的常态。我挂断了完全相同的问题。

    这是我用的:

    Public Sub Browse_Click()
    
    Dim fileName As String
    Dim result As Integer
    Dim fs
    
    With Application.FileDialog(msoFileDialogFilePicker)
        .Title = "Select Test File"
        .Filters.Add "Text File", "*.txt"
        .FilterIndex = 1
        .AllowMultiSelect = False
        .InitialFileName = "*test*.*"
    
        result = .Show
    
        If (result <> 0) Then
            fileName = Trim(.SelectedItems.Item(1))
    
            Me!txtFileLocation = fileName
    
        End If
    End With
    

    【讨论】:

    • 谢谢,这正是我想要做的——奇怪的是实现它的过程是如何工作的(??)。您通过“initialFileName”过滤器设置过滤器......我想只要它有效:-)
    【解决方案2】:

    文件对话框怎么样?

    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

    【讨论】:

    • 它不会过滤显示哪些文件,而是将文本放在文本框的“文本区域”中。
    【解决方案3】:

    这是你正在尝试的吗?将其粘贴到模块中并运行子 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-13
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多