【发布时间】:2021-06-07 07:29:31
【问题描述】:
目前我正在并排填充 2 个列表框,以提供有关用户表单的信息,然后将其填充到 SQL 数据库表中。
我需要将 2 个列表框变成一个多列列表框,但有 20 列。
这是填充 2 个列表框的当前代码:
Private Sub AddActualRecord()
ListCount = frmRecordActuals.lstDirectTasks.ListCount
frmRecordActuals.lstDirectTasks.AddItem
frmRecordActuals.lstDirectTasks.list(ListCount, 0) = lstWorkItems.list(lstWorkItems.ListIndex, 0)
frmRecordActuals.lstDirectTasks.list(ListCount, 1) = txtPcId.value
frmRecordActuals.lstDirectTasks.list(ListCount, 2) = txtDirectActivityName.value
frmRecordActuals.lstDirectTasks.list(ListCount, 3) = lstWorkItems.list(lstWorkItems.ListIndex, 1)
frmRecordActuals.lstDirectTasks.list(ListCount, 4) = lstWorkItems.list(lstWorkItems.ListIndex, 2)
frmRecordActuals.lstDirectTasks.list(ListCount, 5) = lstWorkItems.list(lstWorkItems.ListIndex, 3)
frmRecordActuals.lstDirectTasks.list(ListCount, 6) = lstWorkItems.list(lstWorkItems.ListIndex, 6)
frmRecordActuals.lstDirectTasks.list(ListCount, 7) = lstWorkItems.list(lstWorkItems.ListIndex, 4)
frmRecordActuals.lstDirectTasks.list(ListCount, 8) = lstWorkItems.list(lstWorkItems.ListIndex, 5)
frmRecordActuals.lstDirectTasks.list(ListCount, 9) = lstProcessStage.list(lstProcessStage.ListIndex, 1)
ListCount2 = frmRecordActuals.lstDirectTasks2.ListCount
frmRecordActuals.lstDirectTasks2.AddItem
frmRecordActuals.lstDirectTasks2.list(ListCount2, 0) = lstProcessStage.list(lstProcessStage.ListIndex, 0)
frmRecordActuals.lstDirectTasks2.list(ListCount2, 1) = cboGrade.list(cboGrade.ListIndex, 1)
frmRecordActuals.lstDirectTasks2.list(ListCount2, 2) = cboGrade.list(cboGrade.ListIndex, 0)
frmRecordActuals.lstDirectTasks2.list(ListCount2, 3) = cboWiderInitiative.list(cboWiderInitiative.ListIndex, 1)
frmRecordActuals.lstDirectTasks2.list(ListCount2, 4) = cboWiderInitiative.list(cboWiderInitiative.ListIndex, 0)
frmRecordActuals.lstDirectTasks2.list(ListCount2, 5) = cboHours.value
frmRecordActuals.lstDirectTasks2.list(ListCount2, 6) = cboMinutes.value
frmRecordActuals.lstDirectTasks2.list(ListCount2, 7) = lblHasCasesID.Caption
If lblHasCasesID.Caption = 1 Then
frmRecordActuals.lstDirectTasks2.list(ListCount2, 8) = txtSelected.value
Else: frmRecordActuals.lstDirectTasks2.list(ListCount2, 8) = "N/A"
End If
If lblHasCasesID.Caption = 1 Then
frmRecordActuals.lstDirectTasks2.list(ListCount2, 9) = txtDeselected.value
Else: frmRecordActuals.lstDirectTasks2.list(ListCount2, 9) = "N/A"
End If
End Sub
任何帮助将不胜感激。
我见过各种解决方案,但不知道如何使它们适合。
编辑:这是用一个列表框替换 2 个列表框。
我想完全删除旧的 2 个列表框,并让所有数据只进入 1 个新的 20 列列表框。
每次运行此代码时,都需要向列表框添加另一行。但不是在一个循环中。代码需要能够多次运行并且每次都添加一个新行。
谢谢
编辑 2:
我已经更新了现在插入所有值的代码,但是每次运行代码时,此代码只会覆盖列表框中的第一行。
如何修改代码,以便在再次运行时填充下一行?
非常感谢。
Private Sub AddActualRecord()
ListCount = frmRecordActuals.lstDirectTasks.ListCount
Dim DirectActual(ListCount, 20) As String
DirectActual(ListCount, 0) = lstWorkItems.list(lstWorkItems.ListIndex, 0)
DirectActual(ListCount, 1) = txtPcId.value
DirectActual(ListCount, 2) = txtDirectActivityName.value
DirectActual(ListCount, 3) = lstWorkItems.list(lstWorkItems.ListIndex, 1)
DirectActual(ListCount, 4) = lstWorkItems.list(lstWorkItems.ListIndex, 2)
DirectActual(ListCount, 5) = lstWorkItems.list(lstWorkItems.ListIndex, 3)
DirectActual(ListCount, 6) = lstWorkItems.list(lstWorkItems.ListIndex, 6)
DirectActual(ListCount, 7) = lstWorkItems.list(lstWorkItems.ListIndex, 4)
DirectActual(ListCount, 8) = lstWorkItems.list(lstWorkItems.ListIndex, 5)
DirectActual(ListCount, 9) = lstProcessStage.list(lstProcessStage.ListIndex,1)
DirectActual(ListCount, 10) = lstProcessStage.list(lstProcessStage.ListIndex, 0)
DirectActual(ListCount, 11) = cboGrade.list(cboGrade.ListIndex, 1)
DirectActual(ListCount, 12) = cboGrade.list(cboGrade.ListIndex, 0)
DirectActual(ListCount, 13) = cboWiderInitiative.list(cboWiderInitiative.ListIndex, 1)
DirectActual(ListCount, 14) = cboWiderInitiative.list(cboWiderInitiative.ListIndex, 0)
DirectActual(ListCount, 15) = cboHours.value
DirectActual(ListCount, 16) = cboMinutes.value
DirectActual(ListCount, 17) = lblHasCasesID.Caption
If lblHasCasesID.Caption = 1 Then
DirectActual(ListCount, 18) = txtSelected.value
Else: DirectActual(ListCount, 18) = "N/A"
End If
If lblHasCasesID.Caption = 1 Then
DirectActual(ListCount, 19) = txtDeselected.value
Else: DirectActual(ListCount, 19) = "N/A"
End If
With frmRecordActuals.lstDirectTasks
.ColumnCount = 12
.list = DirectActual
End With
End Sub
【问题讨论】:
-
对我来说不太清楚...您需要直接填充列表(而不是现有的两个),还是从现有的两个填充?
-
如果您想要超过 10 列,则不能使用
AddItem。您需要使用范围或将数组分配给控件的List(或Column)属性。 -
编辑添加到原始问题。我对数组没有经验,非常感谢您的帮助。
-
还是不清楚...你喜欢先填充两个现有的列表框,然后取出它们的项目并填充另一个列表框(20列)吗?然后,为每个代码运行在所有三个列表框中添加另一行?
-
我问过你这方面的问题,你什么都没说,编辑了你的问题,二合一谈了......重要的想法是你不能使用
AddItem超过10列。因此,您必须首先将数据加载到数组中,比如说arrData,然后简单地使用listBoxName.List = arrData。
标签: excel vba listbox multiple-columns populate