4

当组合框值发生变化时,我想获得组合框的旧值。

我试过类似的东西:

Private Sub ComboBox1_Change()
        Application.EnableEvents = False
        newVal = ComboBox1.Value
        Application.Undo
        oldVal = ComboBox1.Valu
End Sub

或者

Private Sub ComboBox1_Change()
        Application.EnableEvents = False
        newVal = ComboBox1.Value
        ComboBox1.Undo
        oldVal = ComboBox1.Valu
End Sub

但它似乎不起作用......

谢谢

4

3 回答 3

5

您可以使用一个静态变量,在事件调用之间保存其值ComboBox1_Change

Private Sub ComboBox1_Change()
Static OldValue As String

With Me.ComboBox1
    Debug.Print "Value: "; .Value; " Old Value: "; OldValue
    OldValue = .Value
End With
End Sub

如果您需要在 Change 事件之外访问 OldValue,请使用模块级变量,如 @Ifrandom 所述。

于 2013-08-06T17:39:09.387 回答
2

这需要更多的工作,但我过去所做的是创建一个包含该值的私有变量。

基本上在更改事件中,您对旧值执行所需的操作,然后将旧值变量更新为新值。

Private oldValueComboBox as String

Private Sub ComboBox1_Change()
    ' Do whatever you need to do with the old value, in this case msgbox
    msgbox oldValueComboBox

    ' Set the old value variable to the new value
    oldValueComboBox = ComboBox1
End Sub

您还可以使用静态变量作为另一篇文章提到的。如果您使用静态变量,它只能在组合框更改的范围内使用,如果您使用私有变量,则它对整个表单可见。

于 2013-08-06T17:40:39.283 回答
2

我经常使用 excel 组合框,并开发了许多有用的功能,例如: * 从注册表或隐藏的“APP_DATA”工作表中保存和加载组合框数据 * 通过输入新值并按添加新的永久组合框项目 *允许通过双击框来编辑组合历史 * 通过擦除任何当前显示的项目并按下来清除所有组合历史

这些只是一些让你开始的想法,代码相当简单,我只是写了一些简单的subs:*从历史字符串加载组合框*删除分隔字符串*事件以捕获“新项目”或“删除项目”功能*事件来捕获“编辑项目”功能

添加新项目时,我只是将其附加到历史字符串中,并删除它以防万一。历史字符串在初始化和终止时保存或从注册表加载,或者在它们更改时,并且初始化也填充组合。我一直认为会有一个简单的方法来做到这一点,因为我看到这么多组合框维护历史(我限制为最新的 24 个项目),但我从来没有找到任何代码,所以我自己做了。在某些应用程序中,即使双击工作表单元格值也可以填充或 CSV 附加到组合框,或者命令按钮可以提示输入一系列单元格并将其加载到 CSV 列表中,非常有用。

于 2017-07-20T22:06:29.217 回答