我在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。
此外,我还尝试了Date
和String
的{{1}}和lStart
类型。
提前感谢您的帮助!
答案 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
希望它有所帮助...