使用多个通配符表示.csv文件名

时间:2013-03-01 22:22:52

标签: excel vba

我目前有一个查找特定文件名的宏,并根据结果运行特定于该文件的特定子文件:

Sub CommandButton3_Click()
Dim i As Integer
Dim fname As Variant
Dim filepath As Variant
'filepath = Application.GetOpenFilename(FileFilter:="Excel File (*.csv), *.scv")

fname = Application.GetOpenFilename(FileFilter:="Excel File (*.csv), *.scv",    
Title:="Please select a stat file", MultiSelect:=True)
filepath = ThisWorkbook.Path

For i = 1 To UBound(fname)
    If fname(i) = filepath & "\" & "Nodes.csv" Then
        Workbooks.Open (fname(i))
        Call Node
    ElseIf fname(i) = filepath & "\" & "IOGroups.csv" Then
        Workbooks.Open (fname(i))
        Call IOGrp
    ElseIf fname(i) = filepath & "\" & "ManagedDiskGroups.csv" Then
        Workbooks.Open (fname(i))
        Call MdiskGrp
    ElseIf fname(i) = filepath & "\" & "ManagedDisks.csv" Then
        Workbooks.Open (fname(i))
        Call Mdisk
    ElseIf fname(i) = filepath & "\" & "Ports.csv" Then
        Workbooks.Open (fname(i))
        Call Ports
    ElseIf fname(i) = filepath & "\" & "Subsystem.csv" Then
        Workbooks.Open (fname(i))
        Call Subsystem
    ElseIf fname(i) = filepath & "\" & "Volumes.csv" Then
        Workbooks.Open (fname(i))
        Call Volumes        
     Else            
    End If
Next i
End Sub

我希望能够在名称中使用2个通配符,即:

If fname(i) = filepath & "\" & "*Node*.csv" Then

这是否有可能,需要这个的原因是文件的名称不同,但每个文件名中的根词总是相同的,唯一的问题是通常在根词之前和之后的东西。有任何想法吗?此外,目前包含此宏的工作簿必须与用于工作的文件位于同一目录中,有没有办法更改它?谢谢!

2 个答案:

答案 0 :(得分:1)

使用Dir为您提供该目录中符合通配符的文件的立即列表(而不是使用Like测试每个文件)

Sub GetFIles()
Dim Strfile As String
Strfile = Dir(ThisWorkbook.Path & "\" & "*node*.csv")
Do While Len(Strfile) > 0
'do something with returned files
Debug.Print Strfile
Strfile = Dir
Loop
End Sub

答案 1 :(得分:0)

VBA支持Like关键字,因此您只需使用Like代替=即可使这些通配符生效:

If fname(i) Like filepath & "\" & "*Node*.csv" Then...

要从您想要的任何地方获取文件,而不仅仅是当前目录,请尝试Application.FileDialog而不是Application.GetOpenFilenameApplication.FileDialog.SelectedItems返回完整路径。