powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA & Построитель выражений
42 сообщений из 42, показаны все 2 страниц
VBA & Построитель выражений
    #32560708
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Почему, когда я навешиваю на кнопку формы через VBA следующий код:

Msgbox Nz(DLookup("[Остатки (хранение)]![Остаток (кг)]", "[Остатки (хранение)]", "Дата = DateAdd('m', 1, DateSerial(Year(Forms!Отчеты![Конец периода]), Month(Forms!Отчеты![Конец периода]), 1)) - 1"), "0")

, то при нажатии получаю значение 150 (правильное), а если навешиваю через построитель выражений следующий код:

=Nz(DLookUp("[Остатки (хранение)]![Остаток (кг)]";"[Остатки (хранение)]";Дата=DateAdd("m";1;DateSerial(Year(Forms!Отчеты![Конец периода]);Month(Forms!Отчеты![Конец периода]);1))-1);"0")

, получаю значение 0?
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560710
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThuGесли навешиваю через построитель выражений следующий код:

Код: plaintext
=Nz(DLookUp("[Остатки (хранение)]![Остаток (кг)]";"[Остатки (хранение)]";Дата=DateAdd("m"; 1 ;DateSerial(Year(Forms!Отчеты![Конец периода]);Month(Forms!Отчеты![Конец периода]); 1 ))- 1 );"0")

, получаю значение 0?На что ты навешиваешь через построитель? У тебя форма-то при поиске этого значения открыта?
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560720
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Первая форма, собственно, "Отчеты", она открыта и заполнены нужные поля (в частности, "Конец периода".
На второй (тестовой) форме просто кнопка... когда через VBA на нее код вешаю, работает, когда через построитель - нет. Почему?
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560725
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThuGПервая форма, собственно, "Отчеты", она открыта и заполнены нужные поля (в частности, "Конец периода".
На второй (тестовой) форме просто кнопка... когда через VBA на нее код вешаю, работает, когда через построитель - нет. Почему?Что значит "вешаю код через построитель"?
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560737
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правой кнопкой мыши на кнопке при редактировании формы -> обработка событий -> выражения. Открывается построитель выражений, ввожу код.

:-/
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560746
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
[Остатки (хранение)]![Остаток (кг)] - это неверно.
[Остаток (кг)] - лучше, а то и вообще без квадратных скобок.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560747
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThuGПравой кнопкой мыши на кнопке при редактировании формы -> обработка событий -> выражения. Открывается построитель выражений, ввожу код.И чего же ты после этого хочешь? Делай нормальным VBA, не выпендривайся.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560753
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Саныч
автор[Остатки (хранение)]![Остаток (кг)] - это неверно.

я бы иначе высказался - неожиданно.

автор[Остаток (кг)] - лучше, а то и вообще без квадратных скобок

Вряд ли лучше. Тема, видимо, в том, что при работе через построитель
придется писать

Код: plaintext
"Forms![Остатки (хранение)]![Остаток (кг)]"

Хотя в поле [Остаток (кг)] формы [Остатки (хранение)]
я бы скорее число килограммов ожидал увидеть, чем выражение выбора для Dlookup
Поэтому и говорю - неожиданно...
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560756
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Владими Саныч, проверл, дело не в этом. При том такие вещи работали на более простых конструкциях. В чем еще может быть дело?

2 маяк, есть предложения? Из одной таблицы запросом надо взять данные для отчета (сделано), из другой - как раз итоги для того же отчета... С VBA понятно, но хочется проще.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560757
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А это на форме??? Я думал, что это в таблице... Да и Аксесс подумал бы...
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560758
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А еще в условии пропали кавычки:
...;Дата=DateAdd("m";1;...
а надо
... ;"[Дата]=DateAdd('m';1;...
...
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560760
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Нашел!!!

Код: plaintext
"m"

Вот эти кавычки все сбивают. Почему в первом примере они не такие?
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560761
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Victosha, это не форма, а таблица. Потому и DLookUp.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560762
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
:^) Опоздал.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560766
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
акцессу деваться некуда.

а ты наверно, прав - похоже - таблица это.
так что твой совет правильный.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560767
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Он действительно неправильный, но не поэтому.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560771
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заключил в кавычки условие в DLookUp в построителе... Надо что-то делать с вложенными кавычками "m", апострофы не подходят: #Ошибка

К слову, от кнопки в тестовой форме перешел к полю в отчете - через построитель на него навесил тот же код. Ибо это и есть конечная цель.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560773
Фотография Victosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНадо что-то делать с вложенными кавычками "m",
удвоить: ""m""
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560779
Фотография маяк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ThuGесть предложения? Из одной таблицы запросом надо взять данные для отчета (сделано), из другой - как раз итоги для того же отчета... С VBA понятно, но хочется проще.Ctrl+G, debug.print [выражение]. Если это даст нужное значение, а привязывание той же фигни с точностью до ";/," к контролу в отчёте не даст - сигнализируй.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560784
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторНадо что-то делать с вложенными кавычками "m"", апострофы не подходят

Дело не в апострофах, с ними все нормально.
Проблема в точках с запятой в выражении в кавычках, надо просто запятые
... ;"Дата=DateAdd('m',1,DateSerial(Year(Forms!Отчеты![Конец периода]),Month(Forms!Отчеты![Конец периода]),1))-1")...
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560789
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удвоение кавычек не помогло.

Если делаю

=DLookUp("[Остаток (кг)]";"[Остатки (хранение)]";"[Дата]=#06/30/04# And [Предприятие]=Forms!Отчеты!Предприятие And [Вид топлива]='АИ-80'")

, работает.

Теперь вместо 06/30/04 надо ЛЮБЫМ СПОСОБОМ вставить последнее число месяца, указанного (разумеется, как дата целиком) в поле [Конец периода] на форме [Отчеты].
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560793
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Кажется, есть мысль. Только сначала вопрос: никак не могу понять, к чему относится -1. Это добавить месяц и отнять день?
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560795
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Serge Gavrilov, точки с запятой вместо запятых - это дурацкие требования построителя, в VBA, конечно, запятые.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560797
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Точно. Собственно, с этого форума такую идею и почерпнул.

/topic/99421&hl=
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560799
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор2 Serge Gavrilov, точки с запятой вместо запятых - это дурацкие требования построителя, в VBA, конечно, запятые.
Причем тут требование посроителя и VBA?
Я говорю о тех точках с запятых, которые в строке, вместо них должны быть запятые, проверить трудно?
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560801
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Тогда так:

Код: plaintext
1.
2.
=Nz(DLookUp("[Остатки (хранение)]![Остаток (кг)]";"[Остатки (хранение)]";Дата=#" &
format(DateAdd("m";1;DateSerial(Year(Forms!Отчеты![Конец периода]);Month(Forms!Отчеты![Конец периода]);1))-1; "mm\/dd\/yyyy")
& "#);"0")
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560804
Фотография Serge Gavrilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор)]";Дата=#" &

Владимир Саныч, но ты допускаешь ту же ожибку - условие не в строке...
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560806
ThuG
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Serge Gavrilov, пять баллов, большое спасибо! Недопонял тебя сначала

2 Владимир Саныч, я так пробовал... даже просто с DateSerial(2004,06,30) не заработало. Ну, вопрос снят, тем не менее. Спасибо за помощь!
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560809
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Serge GavrilovВладимир Саныч, но ты допускаешь ту же ожибку - условие не в строке...
Это не ошибка, это и есть замысел. Сначала посчитать дату, а потом включить ее в строку. А не наоборот, как было.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560812
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А. Таки понял.

=Nz(DLookUp("[Остатки (хранение)]![Остаток (кг)]";"[Остатки (хранение)]"; " Дата=#" & format(DateAdd("m";1;DateSerial(Year(Forms!Отчеты![Конец периода]);Month(Forms!Отчеты![Конец периода]);1))-1; "mm\/dd\/yyyy") & "# " );"0")
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560825
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так не будет проще?
Nz(DLookup("[Остаток (кг)]", "[Остатки (хранение)]", "Дата = CDate('" & _
DateAdd("m", 1, CDate("01/" & Format(Forms!Отчеты![Конец периода], "mm/yyyy"))) & "'"), "0")
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560826
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еденичку и скобку потерял

Nz(DLookup("[Остаток (кг)]", "[Остатки (хранение)]", "Дата = CDate('" & _
DateAdd("m", 1, CDate("01/" & Format(Forms!Отчеты![Конец периода], "mm/yyyy"))) & "') - 1"), "0")
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560828
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Если я не ошибаюсь, CDate трактует подсунутый ему стринг в соответствии с региональными настройками. То есть CDate("1/2/2004") может оказаться и первым февраля, и вторым января.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560834
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычЕсли я не ошибаюсь, CDate трактует подсунутый ему стринг в соответствии с региональными настройками. То есть CDate("1/2/2004") может оказаться и первым февраля, и вторым января.
Правильно! Но тем же и хорошо - в текстбоксе - тот же формат!
И приклейка с помощью # тоже опасна по этой причине, а может быть даже еще опаснее, т.к. Акс переворачивает дату как он ее понимает
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560836
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Rivkin DmitryПравильно! Но тем же и хорошо - в текстбоксе - тот же формат!
Понял. Действительно.

Rivkin Dmitry
И приклейка с помощью # тоже опасна по этой причине, а может быть даже еще опаснее, т.к. Акс переворачивает дату как он ее понимает
Но я ведь приклеиваю после форматирования по MMDDYYYY. А форматирую это значение как дату, а не как стринг.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560838
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Стоп!!! Нет!!! Дмитрий, почитай, что ты написал.

CDate("01/" & Format(Forms!Отчеты![Конец периода], "mm/yyyy")

То есть ты заведомо подкладываешь в CDate стринг по формату DDMMYYYY, а не из текстбокса.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560841
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но я же дважды пользуюсь CDate !!!
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560842
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но внешний срабатывает правильно (его параметр либо дата, либо целое число), а внутренний неправильно. Так что взаимно нейтрализоваться они не могут.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560843
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему? Если наружный верно работает, так и внутренний отработает
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32560844
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Но сначала-то работает внутренний! И если его результат неправильный, то ошибка так и пойдет дальше, вплоть до конечного результата всего выражения.
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32561034
Rivkin Dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь за перерыв - спать ходил...

CDate("01/" & Format(Forms!Отчеты![Конец периода], "mm/yyyy"))
возвращает date без проблем.
DateAdd продлжает возвращать date
и Дата = CDate только корректно передает критерий
...
Рейтинг: 0 / 0
VBA & Построитель выражений
    #32564473
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Rivkin DmitryCDate("01/" & Format(Forms!Отчеты![Конец периода], "mm/yyyy"))
возвращает date без проблем.
Если в настройках указано mm/dd/yyyy, то CDate("01/" & ...) вернет какое-нибудь число месяца января, тогда как по замыслу автора программы должно быть первое число какого-нибудь месяца.
...
Рейтинг: 0 / 0
42 сообщений из 42, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / VBA & Построитель выражений
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]