OldValue свойство
OldValue
работает только на связанных полях. документация гласит:
Свойство OldValue содержит неотредактированные данные из связанного элемента управления и доступно только для чтения во всех представлениях.
Если вам нужно отслеживать старое значение для несвязанного элемента управления, вы можете сделать это вручную из кода: например, вы можете использовать событие формы Current
или Load
или событие BeforeUpdate
поля со списком, чтобы загрузите ваши начальные значения в переменные, определенные в модуле VBA вашей формы.
(потенциально) лучший подход
Вам не нужно поддерживать отдельный логический столбец, чтобы узнать, отображалось ли поле в другом комбо или нет.
Давайте рассмотрим конкретный пример:
Предполагая, что у вас есть 3 поля со списком на вашем Form1
: Combo1
, Combo2
, Combo3
.
Я хочу отобразить список стран в каждой и исключить из списка те страны, которые я уже выбрал в других полях со списком.
Установите RowSource
из Combo1
в:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo2],
[Forms]![Form1]![Combo3]))
ORDER BY Country.[CountryName];
Установите RowSource
из Combo2
в:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo1],
[Forms]![Form1]![Combo3]))
ORDER BY Country.[CountryName];
Установите RowSource
из Combo3
в:
SELECT Country.ID,
Country.CountryName
FROM Country
WHERE (Country.ID Not In ([Forms]![Form1]![Combo1],
[Forms]![Form1]![Combo2]))
ORDER BY Country.[CountryName];
Затем установите событие GotFocus для каждого поля со списком, чтобы запросить его содержимое по мере необходимости:
Private Sub Combo1_GotFocus()
Combo1.Requery
End Sub
Private Sub Combo2_GotFocus()
Combo2.Requery
End Sub
Private Sub Combo3_GotFocus()
Combo3.Requery
End Sub