Ms Access使用通配符或循环获取文件名

时间:2018-09-28 12:15:43

标签: vba ms-access

我正在使用MS Access Forms,并且正在尝试打开文件,但仅基于名称的一部分,却不知道如何打开文件。以下示例有效

Private Sub Open_Email_Click()
  On Error GoTo Err_cmdExplore_Click
  Dim x As Long
  Dim strFileName As String
  strFileName = "C:\data\office\policy num\20180926 S Sales 112.32.msg"
  strApp = """C:\Program Files\Microsoft Office\Office15\Outlook.exe"""
  If InStr(strFileName, " ") > 0 Then strFileName = """" & strFileName & """"
  x = Shell(strApp & " /f " & strFileName)
Exit_cmdExplore_Click:
  Exit Sub

Err_cmdExplore_Click:
  MsgBox Err.Description
  Resume Exit_cmdExplore_Click
End Sub

如果我将strFilename更改为 strFileName = "C:\data\" & Me.Office & "\" & Me.nm & " " & Me.pol & "\" & "*"& " S Sales " & Me.amt & "*" & ".msg" 它包括*,而不是用作通配符,日期/数字可以是任何数字或其他格式,但始终为八个数字。我尝试对数字使用while循环,但是不确定这样做的最好方法。

2 个答案:

答案 0 :(得分:3)

您可以使用Dir函数遍历所有与字符串模式匹配的文件。

strApp = """C:\Program Files\Microsoft Office\Office15\Outlook.exe""" 
Dim strFilePattern As String
strFilePattern ="C:\data\" & Me.Office & "\" & Me.nm & " " & Me.pol & "\" & "*"& " S Sales " & Me.amt & "*" & ".msg"

Dim strFileName As String
strFileName = Dir(strFilePattern)
Do While Not strFileName = vbNullString
    If InStr(strFileName, " ") > 0 Then strFileName = """" & strFileName & """" 
    x = Shell(strApp & " /f " & strFileName) 
    strFileName = Dir
Loop

以模式作为参数的对Dir的首次调用将找到第一个与提供的模式匹配的文件。随后所有没有该模式的调用都将返回与该模式匹配的下一个文件。

答案 1 :(得分:1)

因此,让我们重新构建问题。假设您在给定的文件夹中有以下5个文件:

  • A:\ peter.msg
  • A:\ bstack.msg
  • A:\ coverflow.msg
  • A:\ heter.msg
  • A:\ beter.msg

,您需要找到与"A:\*eter.msg"相对应的文件并进行打印。 为此,您需要使用关键字Like

Sub TestMe()

    Dim someNames As Variant
    someNames = Array("A:\peter.msg", "A:\bstack.msg", _
                "A:\coverflow.msg", "A:\heter.msg", "A:\beter.msg")

    Dim cnt As Long
    For cnt = LBound(someNames) To UBound(someNames)
        If someNames(cnt) Like "A:\*eter.msg" Then
            Debug.Print someNames(cnt)
        End If
    Next

End Sub

Loop through files in a folder using VBA?