我目前有一个查找特定文件名的宏,并根据结果运行特定于该文件的特定子文件:
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
这是否有可能,需要这个的原因是文件的名称不同,但每个文件名中的根词总是相同的,唯一的问题是通常在根词之前和之后的东西。有任何想法吗?此外,目前包含此宏的工作簿必须与用于工作的文件位于同一目录中,有没有办法更改它?谢谢!
答案 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.GetOpenFilename
。 Application.FileDialog.SelectedItems
返回完整路径。