VBA: как проверить есть ли значение в объекте

Автор aoshi, 19 июля 2017, 09:39

aoshi

Проблема такова. Ссылаюсь на объект через переменную с помощью 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
[свернуть]

Можно сделать и как вы: можно сделать обработчик ошибок не в конце процедуры, а внутри, если вам так удобнее. Я показал варианты, как я делаю.