我必须使用的Excel UserForm有一个组合框。它的RowSource是一个2列的范围(属性Text
coles来自第2列,属性Value
coles来自第一列)。
当我通过单击组合框(在窗体上)更改text
时,value
会更新,但当我在VBA代码中设置.Text
属性时,".Value"值不会更新。如何强制vba代码复制手动行为?谢谢
Public Sub generalSettingsForm_MyCombo(ByVal newValue As String)
generalSettingsForm.MyCombo.Text = newValue
Call generalSettingsForm.someUnrelatedButton_Click ' some code
Call generalSettingsForm.MyCombo_Change ' some code
Dim str As String
srt = generalSettingsForm.RatingModelCombo.Value
End Sub
激发一些更新事件将是最好的选择,但VBA上下文菜单没有任何类似的内容。
您需要在表单中添加一些代码。双击文本框时,您将看到创建了一个新的(空)事件-当.text更改时,您可以在那里添加代码来更改组合框值。
以下代码对我有效(此代码位于常规模块中):
Sub demoUpdate()
With UserForm1
.ComboBox1.Text = "this"
MsgBox "text is now " & .ComboBox1.Text
MsgBox "value is now " & .ComboBox1.Value
.Show
MsgBox "value is now " & .ComboBox1.Value & "; text is " & .ComboBox1.Text
.ComboBox1.Text = "that"
MsgBox "text is now " & .ComboBox1.Text
MsgBox "value is now " & .ComboBox1.Value
.Show
MsgBox "value is now " & .ComboBox1.Value & "; text is " & .ComboBox1.Text
End With
End Sub
在我的案例中,rowSource
是一个单列宽。。。我确实指定了一个controlSource
作为comboBox的属性之一。我看不到您在双列中看到的内容——对我来说,当rowSource
范围为两列宽时,组合框只响应第一列。。。