当组合框值发生变化时,我想获取组合框的旧值。
我试过这样的东西:
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列表中的组合框中,非常有用。