VBA列表框-选择文本问题

时间:2019-02-28 10:23:56

标签: excel vba listbox

在vba(基于Excel)中创建的系统中,会有人可以向我指出正确的方向。

我目前有一个带有多列列表框选择的用户窗体,该列表框是从数据库中填充的。但是当您选择列表框上的项目时,它仅显示第一个列。我怎么能做到这一点,所以它显示了第一和第二col。请看下面的图片

Listbox when open

Listbox when selected

form_create_order.Controls("cmb_product_category").Enabled = True

Dim Connection As New ADODB.Connection
Dim rst     As New ADODB.Recordset
Dim rcArray As Variant
Dim sSQL    As String

With Connection
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .ConnectionString = DatabaseLocation
    .Properties("Jet OLEDB:Database Password") = ProtectPassword
    .Open
End With

sSQL = "SELECT ID, Category_Name " & _
    "FROM Category_Database ORDER BY Category_Name;"

rst.Open sSQL, Connection
rcArray = rst.GetRows

With form_create_order.cmb_product_category
    .Clear
    .ColumnCount = 2
    .List = Application.Transpose(rcArray)
    .ListIndex = -1
End With

rst.Close
Connection.Close
Set rst = Nothing
Set Connection = Nothing

2 个答案:

答案 0 :(得分:1)

我建议遵循MSDN文档:How to: Change the Column Widths of a Multi-Column List Box

ListBox1.ColumnWidths="0;500" 'replace `;` with `,` if your system uses commas as a separator



[编辑]

根据PEH条评论,您可以使用:

ListBox1.ColumnWidths = Replace$("0;500", ";", Application.International(xlListSeparator))

如果您正在寻求更灵活的解决方案,而不受区域设置的限制。

答案 1 :(得分:1)

为了提供替代选择(找到here):

Private Sub ComboBox1_Click()

With ComboBox1
    .Text = .List(.ListIndex, 0) & " | " & .List(.ListIndex, 1)
End With

End Sub

在这种情况下,不需要列宽(但是,这是一种更优雅的方法)。