如何在Excel电子表格中的单选列表框中显示所选项目?

时间:2014-08-08 08:06:07

标签: excel vba listbox selecteditem

我在excel上编写一个主文件,每个工作表上都有一个标题,显示通过用户表单指定的数据。 5个控件中有3个有效,但具有开始和结束日期的列表框不会返回所选值。以下是用户表单的“确定”按钮的代码行:

Private Sub OkButton_Click()

Dim s As Integer
Dim lStart As Integer
Dim lEnd As Integer

For s = 2 To 9

    Worksheets(s).Activate
    Cells(1, 2) = CompanyTextBox.Value

    For lStart = 0 To StartListBox.ListCount - 1
    If StartListBox.Selected(lStart) = True Then
    Cells(2, 2) = StartListBox.List(lStart)
    End If
    Next lStart

    For lEnd = 0 To EndListBox.ListCount - 1
    If EndListBox.Selected(lEnd) = True Then
    Cells(3, 2) = EndListBox.List(lEnd)
    End If
    Next lEnd

    Cells(4, 2) = RatingListBox.Value

    Cells(5, 2) = GradeListBox.Value

Next s

Unload Me

End Sub

我的问题非常类似于有关堆栈溢出的未回答的问题:https://stackoverflow.com/questions/6143420/data-transfer-to-excel-from-visual-basic-2008

此外,我还尝试了DateString的{​​{1}}和lStart类型。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

据我所知,当ListBox属性“MultiSelect”设置为“True”时,“Selected”属性很有用。这意味着您可以在ListBox控件中选择多个项目。

当“MultiSelect”设置为“False”时,最好使用ListBox属性“ListIndex”,它返回-1和“ListCount-1”之间的索引值,指示列表中的哪个项目已被点击并且在用户形式的控制中显而易见。

当没有选择项目时,“ListIndex”等于-1,选择的第一个项目:0,最后选择的项目:“ListCount-1”。 因此,这是在我写完之后修改的代码:

Private Sub OkButton_Click()

Dim s As Long
Dim lStart As Long
Dim lEnd As Long
Dim WS As Worksheet

For s = 2 To 9

    Set WS = Worksheets(s)

    WS.Cells(1, 2) = WS.CompanyTextBox.Value

    If WS.StartListBox.ListCount > -1 Then
        WS.Cells(2, 2) = WS.StartListBox.List(WS.StartListBox.ListIndex)
    else
        WS.Cells(2, 2) = ""
    End If

    If WS.EndListBox.ListIndex > -1 Then
        WS.Cells(3, 2) = WS.EndListBox.List(WS.EndListBox.ListIndex)
    Else
        WS.Cells(3, 2) = ""
    End If

    WS.Cells(4, 2) = WS.RatingListBox.Value
    WS.Cells(5, 2) = WS.GradeListBox.Value

Next s

Unload Me
Set WS = Nothing

End Sub

希望它有所帮助...