[英]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.