我有一個未系結的 ListBox,其中 1 列在 onl oad 中填充了檔案夾中的檔案串列。用戶可以單擊打開檔案的串列框中的任何行。這是因為整個檔案路徑是 ListBox 中的內容。
我希望串列框只顯示檔案名,但仍然可以點擊完整鏈接。我的想法是將 ListBox 更改為 2 列,并將第 1 (0) 列作為系結列但隱藏,并具有用戶實際看到的僅顯示檔案名的第二列 (1)。
下面的代碼可以很好地從檔案路徑中提取檔案名并將其放入訊息框中。有沒有辦法將此應用于串列中的所有“行”,以便使用第一列的檔案名填充第二列?
提前致謝。
Dim sPath As String
Dim sFile As String
sPath = FileList.Column(0)
sFile = Right(sPath, Len(sPath) - InStrRev(sPath, "\"))
MsgBox sFile
編輯附加資訊:
ListBox RowSource 設定為 Value List,并通過在加載表單時呼叫以下函式來填充串列(感謝 Allen Browne,http://www.allenbrowne.com/ser-59.html)
Public Function ListFiles(strPath As String, Optional strFileSpec As String, _
Optional bIncludeSubfolders As Boolean, Optional lst As ListBox)
On Error GoTo Err_Handler
'Purpose: List the files in the path.
'Arguments: strPath = the path to search.
' strFileSpec = "*.*" unless you specify differently.
' bIncludeSubfolders: If True, returns results from subdirectories of strPath as well.
' lst: if you pass in a list box, items are added to it. If not, files are listed to immediate window.
' The list box must have its Row Source Type property set to Value List.
'Method: FilDir() adds items to a collection, calling itself recursively for subfolders.
Dim colDirList As New Collection
Dim varItem As Variant
Call FillDir(colDirList, strPath, strFileSpec, bIncludeSubfolders)
'Add the files to a list box if one was passed in. Otherwise list to the Immediate Window.
If lst Is Nothing Then
For Each varItem In colDirList
Debug.Print varItem
Next
Else
For Each varItem In colDirList
lst.AddItem varItem
Next
End If
Exit_Handler:
Exit Function
Err_Handler:
MsgBox "Error " & Err.Number & ": " & Err.Description
Resume Exit_Handler
End Function
Private Function FillDir(colDirList As Collection, ByVal strFolder As String, strFileSpec As String, _
bIncludeSubfolders As Boolean)
'Build up a list of files, and then add add to this list, any additional folders
Dim strTemp As String
Dim colFolders As New Collection
Dim vFolderName As Variant
'Add the files to the folder.
strFolder = TrailingSlash(strFolder)
strTemp = Dir(strFolder & strFileSpec)
Do While strTemp <> vbNullString
colDirList.Add strFolder & strTemp
strTemp = Dir
Loop
If bIncludeSubfolders Then
'Build collection of additional subfolders.
strTemp = Dir(strFolder, vbDirectory)
Do While strTemp <> vbNullString
If (strTemp <> ".") And (strTemp <> "..") Then
If (GetAttr(strFolder & strTemp) And vbDirectory) <> 0& Then
colFolders.Add strTemp
End If
End If
strTemp = Dir
Loop
'Call function recursively for each subfolder.
For Each vFolderName In colFolders
Call FillDir(colDirList, strFolder & TrailingSlash(vFolderName), strFileSpec, True)
Next vFolderName
End If
End Function
Public Function TrailingSlash(varIn As Variant) As String
If Len(varIn) > 0& Then
If Right(varIn, 1&) = "\" Then
TrailingSlash = varIn
Else
TrailingSlash = varIn & "\"
End If
End If
End Function
uj5u.com熱心網友回復:
ListBox.AddItem 方法檔案說明您可以將多個串列框列的值作為用分號分隔的字串提供。因此,如果您想要兩列在第一列中包含完整路徑 ( varItem),而在第二列中僅包含檔案名 ( Dir(varItem)),則可以像這樣更改ListFiles函式...
For Each varItem In colDirList
'lst.AddItem varItem
lst.AddItem varItem & ";" & Dir(varItem)
Next
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/441764.html
