MS Access VBA, использующий Option Explicit, выдает ошибку «Variable notfined», но работает в другой базе данных - PullRequest
0 голосов
/ 15 сентября 2018

Я перемещаю формы из одной базы данных Access в другую. Когда я пытаюсь скомпилировать новую базу данных, выдается ошибка «Переменная не определена». Это происходит только при использовании Option Explicit. Переменная является типом данных AccessField, который выбирается запросом SQL формы. Это прекрасно компилируется в базе данных Access, из которой я ее перемещаю, так что я совершенно заблудился, пытаясь выяснить, в чем дело?

Кажется, у меня точно такая же проблема, которая никогда не решалась в этой старой теме: https://bytes.com/topic/access/answers/896346-variable-not-defined-error-field-exists

Это более одного экземпляра. Все, что ссылается на AccessField, которое не объявлено как переменная, вернет эту ошибку при использовании Option Explicit.

Например, форма использует запрос:

Select * from BM where ClientID =143 and Month(BMDate) = 4 and year(bmdate) =2018 order by bmdate

И код VBA внутри этой формы завершится с ошибкой:

Option Explicit
Option Compare Database

Private Sub Form_Load()
    If IsNull(RecNbr) Then
        'Code fails with RecNbr on line above when I try to compile
        'RecNbr is a field selected from the query and is not declared as a variable
    End If
End Sub

1 Ответ

0 голосов
/ 15 сентября 2018

Это может или не может работать, но это слишком долго для комментария.

Это сообщение в вашей связанной ветке, кажется, объясняет:

В представлении дизайна формы Список полей и раскрывающийся список Источника элемента управления для элемента управления отражают текущий дизайн таблицы; но VBA, кажется, имеет устаревшую копию схемы источника данных формы.

Попробуйте повторить синхронизацию кеша VBA (?) Источника записи:

  • В дизайне формы удалите источник записи (при необходимости сохраните его в текстовом редакторе)
  • сохранить и закрыть форму
  • возможно сжатие и восстановление базы данных (я не знаю, изменит ли это поведение)
  • повторно открыть форму в режиме конструктора
  • установить источник записи. Обратите внимание, что после нажатия клавиши «Return» Access занимает небольшой момент, а затем предупреждающие треугольники для связанных элементов управления должны исчезнуть.
  • Проверьте, компилируется ли сейчас код.

В качестве примечания я считаю, что код для поиска лучше читается при использовании Me.RecNbr вместо RecNbr при обращении к элементам управления или полям формы (в отличие от переменных VBA).

Если вышеупомянутое все еще не компилируется, вы можете использовать Me!RecNbr.

Полезное чтение: Нотация взрыва и Нотация точек в VBA и MS-Access

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...