【发布时间】:2019-08-01 08:37:18
【问题描述】:
我在 VBA 中有一个带有两个 ListBox 的用户窗体。在UserForm_Initialize() 期间,每个框都会被填满。我为此使用了一个循环,以便只将文本项添加到用户窗体并忽略空单元格:
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
用户可以(单次)在每个 ListBox 中选择一个条目,或者使用按钮从工作表中的两个单元格中加载/选择先前的值:
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
问题: 只要我在用户窗体中手动选择 ListBox 项目,一切都会按预期工作,第三个代码将在单元格 (15, 1) 和 (17, 1) 中重写正确的值(顺便说一下是文本) )。但是,如果我使用按钮(代码 2)用工作表中的先前值填充 ListBox,则只会为一个 ListBox 分配正确的值(输出“Item XYZ”)。另一个得到一个空值(输出:“”)。
当我使用选项卡在用户窗体中选择列表框时,问题消失了。我想这等于用鼠标光标选择项目。
我不知道如何解决这个问题。特别是因为两个 ListBox 之一按预期工作。有人知道这是什么原因吗?
编辑:澄清:使用“加载”按钮,两个值都在列表框中正确选择。但是一个 ListBox 的赋值是空的(使用msgbox ListBox1.value 和msgbox ListBox2.value 测试)。
还有一件事:如果我将ListBox1.SetFocus 和ListBox2.SetFocus 添加到CommandButtonLoad,问题就解决了。但我仍然不知道是什么原因造成的。
【问题讨论】:
-
你试过用
ListBox1.Text代替.value吗? -
另一个是数值吗?如果是,请使用 Cstr(Sheets("Input")....
-
我无法重现该问题。我在用户窗体中添加了 2 个列表框和 2 个按钮并添加了您的代码,如果我按下确认按钮,选定的值将写入输入表,如果我按下加载按钮,那么在两个列表框中都选择了正确的值。我使用
A, B, C, …作为示例数据,一切正常。 -
当您点击
CommandButtonLoad时,列表框中的正确值是否会突出显示/选中? -
@horst no differenceece @ EvR Nope。所有单元格具有相同的格式。 @StavrosJon 不。
Sheets("Input").Cells(15, 1)的值是正确的(“项目 XYZ”),但ListBox1.Value的值是错误的(“”)。