使用来自另一列的数据填充 Access ListBox 列
Populate Access ListBox column with data from another column
我有一个未绑定的 ListBox,其中包含 1 列,在 OnLoad 中填充了文件夹中的文件列表。用户可以单击打开文件的列表框中的任何行。这是有效的,因为整个文件路径就是列表框中的内容。
我希望列表框仅显示文件名,但仍然能够在单击时跟随完整的 link。我的想法是将 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 设置为值列表,并通过在加载表单时调用以下函数来填充列表(感谢 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
ListBox.AddItem method 文档解释了您可以将多个列表框列的值作为以分号分隔的字符串提供。因此,如果您想要两列在第一列中包含完整路径 (varItem
),而在第二列中仅包含文件名 (Dir(varItem)
),您可以像这样更改 ListFiles
函数...
For Each varItem In colDirList
'lst.AddItem varItem
lst.AddItem varItem & ";" & Dir(varItem)
Next
我有一个未绑定的 ListBox,其中包含 1 列,在 OnLoad 中填充了文件夹中的文件列表。用户可以单击打开文件的列表框中的任何行。这是有效的,因为整个文件路径就是列表框中的内容。
我希望列表框仅显示文件名,但仍然能够在单击时跟随完整的 link。我的想法是将 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 设置为值列表,并通过在加载表单时调用以下函数来填充列表(感谢 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
ListBox.AddItem method 文档解释了您可以将多个列表框列的值作为以分号分隔的字符串提供。因此,如果您想要两列在第一列中包含完整路径 (varItem
),而在第二列中仅包含文件名 (Dir(varItem)
),您可以像这样更改 ListFiles
函数...
For Each varItem In colDirList
'lst.AddItem varItem
lst.AddItem varItem & ";" & Dir(varItem)
Next