excel使用RowSource中的值对用户名进行组合:如何在更新.Text后更新.Value?

时间:2013-02-11 13:27:36

标签: excel vba excel-vba automation

我必须使用的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上下文菜单没有任何远程类似的内容。

2 个答案:

答案 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范围是两列宽时,组合框只响应第一列......