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

我目前有一个macros,它寻找一个特定的文件名,并根据结果运行一个特定的子文件专门为该文件:

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 

这甚至是一个可能性,需要这个的原因是文件的名称不同,但每个文件名中都有根词,总是一样的,唯一的问题是根词前后通常有什么。 有任何想法吗? 此外,目前包含这个macros的工作簿必须与用于工作的文件位于相同的目录中,是否有办法改变这个? 谢谢!

使用Dir ,它给你一个在该目录中的文件的即时列表,满足通配符(而不是用Liketesting每个文件)

 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 

VBA支持Like关键字,所以你可以通过使用Like而不是=来使这些通配符工作:

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

要从任何你想要的文件,而不是只是当前目录,请尝试Application.FileDialog而不是Application.GetOpenFilenameApplication.FileDialog.SelectedItems返回完整的path。