我必须使用的Excel用户窗体有一个组合框。它的RowSource是一个2列范围(属性Text
来自第2列的coles,属性Value
来自第1列的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上下文菜单没有任何远程类似的内容。
答案 0 :(得分:1)
您需要在表单中添加一些代码。当您双击文本框时,您将看到创建了一个新的(空)事件 - 您可以在那里添加代码以在更改.text时更改组合框值。
答案 1 :(得分:1)
以下对我有用(此代码在常规模块中):
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
范围是两列宽时,组合框只响应第一列......