Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: VBA 2003 "значение не присвоено"
 
 автор: Алексей М.   (27.09.2017 в 17:18)   личное сообщение
 
 

Построен запрос. 2 поля, [производство]и[количество]. По запросу сформирована подчинённая форма у которой в примечании есть свободное [Поле1]. В его свойствах, в "источнике данных" пишем "=Sum([количество])".
В основной форме есть поле со ссылкой на подчинённую, на [Поле1]. Точно так же. "=[подчинённая форма]![Forms].[Поле1]".
Если выборка не дала результатов, то в основной форме отображается "#Ошибка", ACCESS при передаче значения глобальной переменной ЗАТЫКАЕТСЯ НА ОШИБКЕ "значение не присвоено".
Пробовал варианты условий IsNull и IsEmpty, чтоб глобальным переменным присвоить нулевые значения. Тщетно.
Как обработать и выйти из такой ошибки? Если значение не присвоено - то Null.

  Ответить  
 
 автор: Alex   (28.09.2017 в 20:29)   личное сообщение
 
 

Думаю, что Вас спасет вот это:
Ситуация обычная:
В подчиненной форме создаем скрытое поле [MyTotal], источником данных которого является что то вроде:
=Sum([Всего])
теперь создаем поле в главной форме с источником данных:
=[Название Объекта Подчиненной формы].[Form]![MyTotal]
и все замечательно - при условии что в ПОДЧИНЕННОЙ ФОРМЕ ЕСТЬ ДАННЫЕ
а если их нет - то в поле будет #Ошибка
Приведенная ниже функция как раз и служит для устранения данной неприятности
Пишем в источнике данных:
=FData([Название Объекта Подчиненной формы].[Form]![MyTotal])
и при отсутствии данных в поле будет просто 0 (ноль)

В глобальном модуле создаем функцию:

' Устраняет #Ошибка при отсутствии данных
Function FData(anyVal As Variant) As Currency
On Error GoTo FDataErr
FData = CCur(anyVal)
Exit Function
FDataErr:
FData = 0
Err.Clear
End Function

Пример использования:

Поле1=FData([Поле2])*[Поле3]
Поле4=FData([Поле5])*[Поле6]
Поле5=Поле1+Поле4

Если не использовать эту функцию, то при отсутствии данных в Поле1 или Поле4, Поле5 будет содержать #Ошибка

Пользовательские варианты:

Function FDataDate(anyVal As Variant) As Date
On Error GoTo FDataDateErr
FDataDate = CCur(anyVal)
Exit Function
FDataDateErr:
FDataDate = 0
Err.Clear
End Function

Function FDataLong(anyVal As Variant) As Long
On Error GoTo FDataLongErr
FDataLong = CCur(anyVal)
Exit Function
FDataLongErr:
FDataLong = 0
Err.Clear
End Function

Function FDataDouble(anyVal As Variant) As Double
On Error GoTo FDataDoubleErr
FDataDouble = CCur(anyVal)
Exit Function
FDataDoubleErr:
FDataDouble = 0
Err.Clear
End Function

Function FDataC(anyVal As Variant) As Currency
On Error GoTo FDataCErr
FDataC = CCur(anyVal)
Exit Function
FDataCErr:
FDataC = 0
Err.Clear
End Function

  Ответить  
 
 автор: Алексей М.   (06.10.2017 в 14:45)   личное сообщение
 
 

Спасибо!
Я тоже решил эту проблему.
Dim FormaPodch as Dao.Recordset
Set FormaPodch = Me.[пф зпр количество].Form.Recordset
If FormaPodch.RecordCount = 0 Then
Любые варианты по Вашему усмотрению
Else
Поле1 = GLOBALNAYA_PEREMENNAYA ' Данные ещё и для отчёта нужны
End If
Как вам такой вариант?

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList