如何从多列列表框中填充特定单元格 - excel vba

时间:2018-01-28 15:05:56

标签: excel vba excel-vba

我有一个包含3列(lbxStN)的列表框(0-fmMultiSelectSingle) 我想在此列表中进行选择(仅一个),并使列表中每列中的数据显示在特定工作表中的特定单元格中(工作表:DeN)。列表F19,第二列C22和第三列H22中的第一列。单击按钮(cmdBtnSelect2)后 列表框的数据存储在同一工作簿中的不同工作表中。

Private Sub cmdBtnSelect2_Click()

Dim i As Long
Dim myVar4 As String
Dim myVar5 As String
Dim myVar6 As String

For i = 0 To lbxStN.ListCount - 1

    If lbxStN.Selected(i) = True Then

        lbxStN.List(i, 0).Value = myVar4
        lbxStN.List(i, 1).Value = myVar5
        lbxStN.List(i, 2).Value = myVar6
    End If

Next

ThisWorkbook.Sheets("DeN").Range("F19") = myVar4
ThisWorkbook.Sheets("DeN").Range("C22") = myVar5
ThisWorkbook.Sheets("DeN").Range("H22") = myVar6

End Sub

如果我运行代码,则会出现'424' Object required错误 这意味着我错过了一些基本的东西。

1 个答案:

答案 0 :(得分:0)

对于您打算执行的操作,无需创建新变量。可以将所选项目的值直接分配给单元格。如下

Private Sub cmdBtnSelect2_Click()
    Dim i as Integer
    For i = 0 To lbxStN.ListCount - 1
        If lbxStN.Selected(i) Then
          ThisWorkbook.Sheets("DeN").Range("F19") = lbxStN.List(i, 0)
          ThisWorkbook.Sheets("DeN").Range("C22") = lbxStN.List(i, 1)
          ThisWorkbook.Sheets("DeN").Range("H22") = lbxStN.List(i, 2)

          Exit For
        End If
    Next i
End Sub

前一个子例程迭代列表中的每个iteam,并检查项是否被选中。如果选择了该项,则会将每列分配给每个单元格。 Exit For将退出迭代,因为无需继续查找更多选定项目。

我使用以下子例程测试代码以将项添加到列表中。我认为如果您尝试进行复杂的分配,将它与您的进行比较是个好主意。

Private Sub CommandButton1_Click()
    lbxStN.Clear

    lbxStN.AddItem "a"
    lbxStN.List(lbxStN.ListCount - 1, 1) = "a2"
    lbxStN.List(lbxStN.ListCount - 1, 2) = "a3"

    lbxStN.AddItem "b"
    lbxStN.List(lbxStN.ListCount - 1, 1) = "b2"
    lbxStN.List(lbxStN.ListCount - 1, 2) = "b3"

    lbxStN.AddItem "c"
    lbxStN.List(lbxStN.ListCount - 1, 1) = "c2"
    lbxStN.List(lbxStN.ListCount - 1, 2) = "c3"
End Sub

我通常会通过阅读别人的代码并尝试理解它来改善编码

干杯!