VBA - 获取Combobox的OLD值

时间:2013-08-06 16:32:15

标签: vba excel-vba combobox excel

我想在组合框值改变时得到ComboBox的旧值。

我尝试过类似的事情:

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

但似乎没有用......

由于

3 个答案:

答案 0 :(得分:4)

您可以使用Static variableComboBox1_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所述。

答案 1 :(得分:2)

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

清除所有组合历史记录

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

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

答案 2 :(得分:1)

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

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

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

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