VBA-获取组合框的OLD值



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

我试过这样的东西:

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

但它似乎不起作用。。。

感谢

您可以使用一个静态变量,该变量在对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,请使用模块级变量,如@Ifsrandom所述。

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

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

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

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

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

这些只是一些让你开始的想法,代码相当简单,我只是为以下内容写了一些简单的sub:*从历史字符串加载组合框*对分隔字符串进行重复数据消除*捕获"新项目"或"擦除项目"功能的事件*捕获"编辑项目"功能的事件

当添加一个新项目时,我只需将其附加到历史字符串中,并对其进行重复数据消除以备不时之需。历史字符串在初始化和终止时保存或从注册表加载,或者在更改时保存或加载,初始化还会填充组合框。我一直认为有一种简单的方法可以做到这一点,因为我看到很多组合框都在维护历史记录(我只限于最新的24项),但我从来没有找到任何代码,所以我只是自己制作了代码。在一些应用程序中,即使双击工作表单元格值也可以填充或CSV附加到组合框,或者命令按钮可以提示将一系列单元格加载到CSV列表中的组合框中,非常有用。

最新更新