2

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

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

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

4

2 回答 2

1

使用Dirwhich 为您提供该目录中满足通配符的文件的即时列表(而不是使用 测试每个文件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
于 2013-03-02T04:54:45.597 回答
0

VBA 支持Like关键字,因此您可以通过使用Like而不是来使这些通配符起作用=

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

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

于 2013-03-02T03:26:28.360 回答