簡體   English   中英

訪問 VBA,打開 windows 文件夾並過濾內容

[英]Access VBA, open a windows folder and filter the contents

我正在嘗試從訪問權限(2016 年)打開 windows 文件夾,並且只顯示一些文件。 該文件夾包含 1000 個文件,(客戶端文件)都以客戶端參考編號 EG G12345 或 H12456 開頭,然后是一個空格,然后是文件是什么。 我想打開文件夾,只顯示當前客戶端訪問的文件。

我想要 d:\data\clients\correspondence\G12345*.*

我目前在客戶端頁面上有一個執行此操作的按鈕(cRef = Client Ref)

Foldername = "d:\data\clients\correspondence\" & cRef & "*.*"
Shell "C:\WINDOWS\explorer.exe """ & foldername & "", vbNormalFocus

但它只是打開我的默認文件位置(C:\documents)我做錯了什么。 謝謝

正如@June7 所建議的,您可以在列表框中列出匹配的文件。 一小段 VBA 代碼可用於創建文件名字符串:

Function fGetFileList(strFolder As String, strFileStart As String) As String
    On Error GoTo E_Handle
    Dim strFile As String
    Dim lngFileLen As Long
    If Right(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
    lngFileLen = Len(strFileStart)
    strFile = Dir(strFolder)
    Do
        If Left(strFile, lngFileLen) = strFileStart Then fGetFileList = fGetFileList & strFile & ";"
        strFile = Dir
    Loop Until strFile = ""
    If Right(fGetFileList, 1) = ";" Then fGetFileList = Left(fGetFileList, Len(fGetFileList) - 1)
fExit:
    On Error Resume Next
    Exit Function
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "fGetFileList", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume fExit
End Function

然后,您可以創建一個包含兩個文本框的表單( txtFolder包含搜索文件夾, txtStartName包含要搜索的文件名的起始部分),一個列表框 ( lstFiles ),其 RowSourceType 設置為“值列表",以及運行搜索的命令按鈕 ( cmdSearch ):

Private Sub cmdSearch_Click()
    On Error GoTo E_Handle
    Me!lstFiles.RowSource = fGetFileList(Me!txtFolder, Me!txtStartName)
sExit:
    On Error Resume Next
    Exit Sub
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "frmFiles!cmdSearch_Click", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume sExit
End Sub

我正在考慮使用 fso 通過文件訪問文件夾和 go。 當程序找到 function Left 與 cRef 匹配的文件時,它會打開該文件夾。 該程序不會查看該文件夾的下文件夾。 但是您可以使用此代碼將其更改為在父文件夾中查找文件夾名稱並打開與 cRef 匹配的文件夾。 希望這可以幫助您並為自己找到解決方案。

Public Sub OpenFolder()
Dim Fso                     As FileSystemObject
Dim Folder                  As Object
Dim File                    As Object
Dim cRef                    As String

cRef = "G12345" 'for example
Set Fso = New scripting.FileSystemObject
Set Folder = Fso.GetFolder("d:\data\clients\correspondence\")

For Each File In Folder.Files
   If Left(cRef, 6) Then
      Shell "C:\WINDOWS\explorer.exe """ & Folder & "", vbNormalFocus
      Stop 'so that you can work on your findings or Exit For to stop it
   End If
Next 'file

End Sub

您必須打開 microsoft Scripting runtime 才能正常工作

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM