2013-08-06 69 views
3

當組合框的值會改變時,我想獲得組合框的舊值。VBA - 獲取組合框的舊值

我已經試過類似:

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 

,但它似乎沒有工作...

感謝

+0

您是否嘗試過OldValue屬性? –

+0

@iDevlop,有一個OldValue屬性?搜索顯示一個用於Access,但不適用於Excel。 –

回答

4

你可以使用一個Static variable持有它在調用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所述。

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 

您還可以在另一個帖子中提到使用靜態變量。如果使用靜態變量,則只能在組合框更改的範圍內使用,如果使用私有變量,則整個窗體都可見。

+0

我認爲我們已經釘了它:)。 –

2

我使用Excel組合框很多,並且已經開發出了許多有用的功能,如: *從註冊表或隱藏「APP_DATA」工作 *保存&負荷組合框的數據通過輸入添加一個新的永久性的組合框項目一個新的值,然後按 *通過雙擊包裝盒上的 *通過擦除任何當前顯示的項目,按

清除所有組合的歷史,這些都只是一些想法,讓你去組合歷史的允許編輯,代碼相當簡單,我只寫了一些簡單的子目錄: *從歷史字符串加載組合框 * dedup分隔字符串 *事件陷阱的「新項目」或「刪除項目」功能 *事件陷阱的「編輯項目」功能

當添加一個新的項目,我只是把它添加到歷史字符串,並進行重複數據刪除以防萬一。歷史字符串在初始化和終止時保存或從註冊表加載,或者當它們被更改時初始化也填充組合。 我一直認爲會有一個簡單的方法來做到這一點,因爲我看到很多組合框保持歷史(我限制到最新的24個項目),但我從來沒有找到任何代碼,所以我只是自己做了。 在某些應用程序中,即使雙擊工作表單元格值也可以填充或CSV附加到組合框,或者命令按鈕可以提示並將一系列單元格加載到組合列表中,非常有用。