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

Vba Ms Access使用通配符或循环获取文件名,vba,ms-access,Vba,Ms Access,我正在使用MS Access表单,试图打开一个文件,但不知道如何打开该文件,因为我只知道部分名称。下面的例子很有用 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

我正在使用MS Access表单,试图打开一个文件,但不知道如何打开该文件,因为我只知道部分名称。下面的例子很有用

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更改为being
strFileName=“C:\data\”&Me.Office&“\”&Me.nm&“&Me.pol&“\”&“*”&S Sales”&Me.amt&“*”&msg”
它包括*而不是将其用作通配符,日期/数字可以是任何形式或其他格式,但始终为8个数字。我尝试在数字上使用while循环,但我不确定这样做的最佳方式。抱歉。

您可以使用该函数迭代匹配字符串模式的所有文件

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
,将找到与提供的模式匹配的第一个文件。所有不带模式的后续调用都将返回与模式匹配的下一个文件。

您可以使用该函数迭代与字符串模式匹配的所有文件

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
,将找到与提供的模式匹配的第一个文件。所有没有该模式的后续调用都将返回与该模式匹配的下一个文件。

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

  • A:\peter.msg
  • A:\bstack.msg
  • A:\coverflow.msg
  • A:\heter.msg
  • A:\beter.msg
您需要找到对应于
“A:\*eter.msg”
的文件并打印它们。 为此,您需要使用关键字
,如

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

那么,让我们重新构建一下这个问题。假设给定文件夹中有以下5个文件:

  • A:\peter.msg
  • A:\bstack.msg
  • A:\coverflow.msg
  • A:\heter.msg
  • A:\beter.msg
您需要找到对应于
“A:\*eter.msg”
的文件并打印它们。 为此,您需要使用关键字
,如

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

是的,有道理。但是,我想像
Shell(QUOTE&fileName"E)
这样的东西看起来会更好。并将
QUOTE
声明为常量。我尝试了此操作,但要求出现预期的语句结束错误,因此我从strFilePattern和StrFileName中删除了dim,但似乎什么也没有发生。@new2编程抱歉,这里有个粗心的错误。你确定模式有效吗?您可以debug.print strFilePattern并验证与此模式匹配的文件是否存在我刚刚尝试过debug,它显示为*S Sales 112.31*.msg而不是数字我认为这是一个完全有效的路径,而不仅仅是一个文件名?是的,很有意义。但是,我想像
Shell(QUOTE&fileName"E)
这样的东西看起来会更好。并将
QUOTE
声明为常量。我尝试了此操作,但要求出现预期的语句结束错误,因此我从strFilePattern和StrFileName中删除了dim,但似乎什么也没有发生。@new2编程抱歉,这里有个粗心的错误。你确定模式有效吗?您可以debug.print strFilePattern并验证与此模式匹配的文件是否存在我刚刚尝试过debug,它显示为*S Sales 112.31*.msg,而不是数字我假设这是一个完全有效的路径,而不仅仅是一个文件名?