2013-08-06 4 views
3

Я хотел бы получить старое значение ComboBox, когда значение combobox изменится.VBA - получить СТАРОЕ значение 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 

, но, кажется, не работает ...

Благодарности

+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 

Если вам нужно получить доступ к OldValue вне события Change, используйте переменную уровня модуля, как описано в @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 

Вы также можете использовать статическую переменную, как упоминает другое сообщение. Если вы используете статическую переменную, ее можно использовать только в пределах области изменения combobox, если вы используете закрытую переменную, она видна для всей формы.

+0

Вместе я думаю, что мы прибили его :). –

2

Я использую первенствовать комбо коробки много, и разработал целый ряд полезных функций, такие как: * сохранить данные поля со списком & нагрузки из реестра или скрытого «App_Data» рабочий лист * добавить новый элемент постоянного поля со списком, введя новое значение и нажать * позволяет редактирование истории комбо двойным щелчком на поле * клирингового всю историю комбо путем стирания любой данный момент, показывая пункт и нажав

это лишь некоторые идеи, чтобы вы собираетесь, код довольно просто, я просто написал несколько простых подпрограмм: * Загрузите поле со списком из строки истории * dedup разделители строка * событие западни для «нового элемента» или «стереть пункты» функции * событие западни для «редактирования элементов» функции

Когда добавляется новый элемент, я просто добавить его в историю string и дедуплировать его на всякий случай. Строки истории сохраняются или загружаются из реестра при инициализации и завершении, или по мере их изменения, и инициализация также заполняет комбо. Я всегда предполагал, что будет простой способ сделать это, так как я вижу так много комбинированных ящиков, поддерживающих историю (я ограничиваю последние 24 элемента), но я никогда не нашел кода, поэтому я просто сделал свой собственный. В некоторых приложениях даже двойной щелчок по значению ячейки листа может быть заполнен или добавлен CSV-код в поле со списком или кнопка командной строки может запрашивать и загружать серию ячеек в список CSV в комбо, что очень полезно.

Смежные вопросы