带有RowSource中的值的excel userforms组合框:如何更新.Text更新后的.Value



我必须使用的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范围为两列宽时,组合框只响应第一列。。。

最新更新