两个列表框-一个返回空值

时间:2019-08-01 08:37:18

标签: excel vba listbox

我在VBA中有一个带有两个ListBox的UserForm。每个框在UserForm_Initialize()期间被填充。为此,我使用了一个循环,以便仅将文本项添加到UserForm中,而忽略空单元格:

Private Sub UserForm_Initialize()
    Dim i As Integer
    For i = 1 To 8
        If Sheets("Data").Cells(2 + i, 10) <> "" Then
            ListBox1.AddItem Sheets("Data").Cells(2 + i, 10)
        End If
    Next i

    For i = 1 To 7
        If Sheets("Data").Cells(11 + i, 10) <> "" Then
            ListBox2.AddItem Sheets("Data").Cells(11 + i, 10)
        End If
    Next i
End Sub

用户可以(单个)在每个列表框中选择一个条目,或者使用按钮从工作表的两个单元格中加载/选择先前的值:

Private Sub CommandButtonLoad_Click()
    ListBox1.Value = Sheets("Input").Cells(15, 1)
    ListBox2.Value = Sheets("Input").Cells(17, 1)
End Sub

然后,另一个按钮将在包含先前值的(相同)单元格中写入选定的ListBox值。

Private Sub CommandButtonConfirm_Click()
    Sheets("Input").Cells(15, 1) = ListBox1.Value
    Sheets("Input").Cells(17, 1) = ListBox2.Value
End Sub

问题: 只要我在UserForm中手动选择ListBox项,一切都会按预期工作,第三个代码将在单元格(15,1)和(17,1)中重新编写正确的值(顺便说一下,是文本) )。但是,如果我使用按钮(代码2)用工作表中的先前值填充列表框,则只有一个列表框被分配了正确的值(输出“ Item XYZ”)。另一个获得空值(输出:“”)。

当我使用Tab键在UserForm中选择ListBoxes时,该问题消失了。我想这等于用鼠标光标选择项目。

我不知道如何解决这个问题。特别是由于两个ListBox之一按预期工作。有人知道原因吗?

编辑:要澄清:使用“加载”按钮,可以在列表框中正确选择两个值。但是一个ListBox的赋值是空的(使用msgbox ListBox1.valuemsgbox ListBox2.value测试)。 还有一件事:如果我将ListBox1.SetFocusListBox2.SetFocus添加到CommandButtonLoad,问题就解决了。但是我仍然不知道是什么原因造成的。

1 个答案:

答案 0 :(得分:0)

尝试:

Private Sub CommandButtonConfirm_Click()

    Sheets("Data").Cells(15, 1) = ListBox1.List(ListBox1.ListIndex)
    Sheets("Data").Cells(17, 1) = ListBox2.List(ListBox2.ListIndex)

End Sub