我在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.value
和msgbox ListBox2.value
测试)。
还有一件事:如果我将ListBox1.SetFocus
和ListBox2.SetFocus
添加到CommandButtonLoad
,问题就解决了。但是我仍然不知道是什么原因造成的。
答案 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