Проблема такова. Ссылаюсь на объект через переменную с помощью set, делаю это в access 2007. Вот пример:
Код
dim form1 as form
dim txtbox as textbox
dim rs as new adodb.recordset
set form1 = forms.item("главная")
set txtbox = form1.controls.item("наименование")
rs.add
rs.fields("наименование").value=iif( isnull(txtbox.value)=true, " ", txtbox.value)
rs.update
Мало того что функция IIf не срабатывает (может я что то не правильно делаю), так даже насильно присвоить при ошибке значение не удается т.е.:
Код
dim txtbox as textbox
dim rs as new adodb.recordset
set form1 = forms.item("главная")
set txtbox = form1.controls.item("наименование")
rs.add
on goto error bug
rs.fields("наименование").value=iif( isnull(txtbox.value)=true, " ", txtbox.value)
rs.update
bug:
rs.fiedl("наименование").value= " "
resume next
Выдает то rs не связан, то в txtbox.value вообще ничего нету, даже нул.
В чем может быть проблема?
Замечание по коду. Вы неправильно работаете с перехватчиком ошибок. Про перехватчик ошибок есть раздел в любом vba-справочнике.
Вариант 1
Включение перехватчика ошибок:
On Error GoTo metka
Код, где может возникнуть ошибка.
Отключение перехватчика ошибок.
On Error GoTo 0
Выход из программы.
Exit Sub
Обработчик ошибок.
metka:
Код, если произошла ошибка.
Вариант 2
Включение перехватчика ошибок:
On Error Resume Next
Код, где может возникнуть ошибка.
Проверка, произошла ли ошибка.
If Err.Number <> 0 Then
Сбрасываем ошибку, если надо будет ещё отловить ошибку.
Err.Number = 0
Действия, если произошла ошибка.
End If
Отключение перехватчика ошибок.
On Error GoTo 0
Можно сделать и как вы: можно сделать обработчик ошибок не в конце процедуры, а внутри, если вам так удобнее. Я показал варианты, как я делаю.