|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Делаю пользовательскую функцию Код: vbnet 1.
Но не могу вызвать (например в событии кнопки на форме) ее в формате =filtr_01() Вылетает ошибка "Введенное выражение содержит функцию с неверным числом аргументов" Если явно объявить переменные в функции =filtr_01(0, #1/1/2022#) то все работает. Почему не дает вызывать без явного задания опциональных переменных? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 14:43 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Да, вот еще момент: происходит такое если функция определена в модуле формы (из которой вызывается). Если же перенести функцию в обычный модуль то все нормально вызывается без параметров. Во вложении тестовая база с функцией в модуле формы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 15:08 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Yup, такие действия по типу макросов не прокатят - действуйте стандартным способом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 15:20 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Потому что должно быть так: В зависимости от того где Вы будете применять эту функцию-либо в модуле формы,либо в общем модуле пишите: Код: vbnet 1. 2. 3.
а затем вызываете её: Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 16:56 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
sdku Потому что должно быть так: В зависимости от того где Вы будете применять эту функцию-либо в модуле формы,либо в общем модуле пишите: Код: vbnet 1. 2. 3.
а затем вызываете её: Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 17:01 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
sdku Потому что должно быть так: В зависимости от того где Вы будете применять эту функцию-либо в модуле формы,либо в общем модуле пишите: Код: vbnet 1. 2. 3.
а затем вызываете её: Код: vbnet 1. 2. 3.
Я так и не понял чем это лучше прямого вызова функции из события элемента (кнопки в данном случае). Какие дает преимущества? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 18:48 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
alecko Yup, такие действия по типу макросов не прокатят - действуйте стандартным способом. Не могли бы немного раскрыть мысль, а то я, честно говоря, не совсем понял что вы имеете в виду. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 18:49 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
sdku Если это вычисления в одной конкретной форме то занахрена функция Ну я внутри этой функции формирую строку фильтра, в которую включено до 15-20 параметров (которые берутся считыванием элементов главной формы). И потом этот фильтр (в целом похожий, но с определенными изменениями, ветвление по которым идет в зависимости от первого аргумента функции) применяется в нескольких местах. Соответсвенно и вызывается функция из нескольких мест главной формы, с разными параметрами, влияющими на модернизацию фильтра. Сама функция находится в модуле главной формы что бы удобней было считывать значения элементов фильтра, находящихся на этой же форме. Можно, конечно, функцию перенести в общий модуль и в нем прописывать полный путь для элементов (что в общем то не сложно), но мне показалось так более правильным и удобным. Но вот почему в модуле формы функция не хочет запускаться без указания опционных параметров - для меня пока так и остается загадкой. Опять же не сложно прописать эти параметры в том месте откуда вызываю, но стало интересно почему так происходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 19:04 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Yup формирую строку фильтра, в которую включено до 15-20 параметров (которые берутся считыванием элементов главной формы а зачем параметры - если функция в форме, то можно напрямую обращаться к функции при нажатии на кнопку, функция же обратиться к значениям контролов пока непонятны ваши намерения - может поясните на примере формы ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 19:53 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Yup alecko Yup, такие действия по типу макросов не прокатят - действуйте стандартным способом. Не могли бы немного раскрыть мысль, а то я, честно говоря, не совсем понял что вы имеете в виду. Имелось ввиду, что суп нужно есть ложкой, а спагетти вилкой... Код VBA желательно вызывать из кода VBA и понимать, что в акцессе макросы и код vba это не одно и то же... примерно как мухи и котлеты... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 19:59 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Yup, этот способ предусмотрен разработчиками Access и называется "Процедура обработки событий" - при выборе создает в VBE соответствующую программу с нужным заголовком. Остается самое простое - наполнить её смыслом. Экселевский способ создания функций в общедоступных модулях тоже возможен (как то не учел влияние Excel-я), иногда. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 20:47 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
ПЕНСИОНЕРКА Yup формирую строку фильтра, в которую включено до 15-20 параметров (которые берутся считыванием элементов главной формы а зачем параметры - если функция в форме, то можно напрямую обращаться к функции при нажатии на кнопку, функция же обратиться к значениям контролов пока непонятны ваши намерения - может поясните на примере формы Так я так и делаю: при нажатии на кнопку обращаюсь к функции. Функция считывает с формы порядка 15-20 контролов (группы переключателей, флажки, поля), формирует строку фильтра и применяет его к нужной форме. В целом похожий (одинаково использующий бОльшую часть контролов-параметров) но с небольшими различиями (по разному интерпретирующий или вообще игнорирующий несколько оставшихся контролов) фильтр мне нужен в нескольких местах: показать в подчиненной форме актуальные записи, отобранные в определенном разрезе; в этой же подчиненной форме в похожем разрезе показать уже не актуальные, исторические записи на определенную дату; показать актуальные записи но в несколько более широком разрезе в отдельной модальной форме, открываемой по отдельной кнопке. Каждый из этих фильтров формируется и затем применяется разными событиями разных контролов (грубо говоря разными кнопками). Поэтому я и сделал общую функцию, которая в зависимости от переданного параметра dbl (обозначает нужный вариант строки фильтра, значения 0, 1 или 2) и переданной даты istDate (второй параметр) формирует в бОльшей части похожую но различающуюся нюансами строку фильтра. В каждой из кнопок, запускающей тот или иной вариант функции, я на событие "Нажатие кнопки" вешаю вызов функции "=filtr_01(dbl;istDate)" (dbl и istDate прописываю в виде значений разумеется). Все работает. Но захотелось мне dbl и istDate сделать опциональными параметрами. istDate вообще используется только в одном варианте фильтра из трех возможных, вариант с dbl=0 (основной) используется в вызовах из событий нескольких контролов. Что бы удовлетворить свою хотелку (без которой, разумеется, можно спокойно обойтись) я функцию объявляю так: Код: vbnet 1.
Но если функция находится в модуле формы, то она не хочет вызываться из события нажатия кнопки "=filtr_01()", ругается на неверное число аргументов и хочет что бы я обязательно указал что dbl=0 и istDate=#1/1/2022#, т.е. вызывать ее надо обязательно "=filtr_01(0;#1/1/2022#)". Если же саму функцию из модуля формы перенести в обычный модуль, то вызов из события нажатия кнопки "=filtr_01()" работает и внутри функции dbl и istDate принимают прописанные им по умолчанию значения (но при этом мне не очень нравится что функция находится в общем модуле). Вот меня и интересует: почему так? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 21:01 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
alecko Yup, этот способ предусмотрен разработчиками Access и называется "Процедура обработки событий" - при выборе создает в VBE соответствующую программу с нужным заголовком. Остается самое простое - наполнить её смыслом. Экселевский способ создания функций в общедоступных модулях тоже возможен (как то не учел влияние Excel-я), иногда. Да, я, безусловно, знаю (и использую) вариант присваивания нужному событию "Процедура обработки событий" и прописывание нужной обработки в теле соответсвующей Private Sub. Но иногда, как в описываемом случае, несколько кнопок вызывают по сути одну и туже функцию с немного различающимися параметрами. И мне эстетически не нравится плодить в модуле формы кучу Private Sub каждой кнопки, которые внутри себя содержат всего одну и туже строку с вызовом общей функции. Чем плохо прописывать вызов этой функции сразу в нужном событии кнопок, не плодя кучу Private Sub в модуле формы? Я реально не понимаю чем это плохо и был бы рад узнать. ЗЫ Если в Private Sub нужного события кнопки больше чем одна строка и это наполнение отличается от наполнения других Private Sub других кнопок то в этом случае все понятно, и, собственно, я так и делаю. Но однотипные Private Sub в модуле только ухудшают, на мой взгляд, навигацию по тексту модуля... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 21:16 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Yup, Зачем все эти длинные объяснения? Во вложенном файле все работает как Вам надо выложите фрагмент БД в нужном для решения "проблемы" объеме,что хотите получить "в выхлопе" и Вам быстро помогут (а из объяснений мало что понятно-может Вашу задачу следует решать совсем иначе) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 21:33 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
ПыСы: Yup ...Я так и не понял чем это лучше прямого вызова функции из события элемента (кнопки в данном случае). Какие дает преимущества? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:04 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
sdku Yup, Зачем все эти длинные объяснения? Во вложенном файле все работает как Вам надо выложите фрагмент БД в нужном для решения "проблемы" объеме,что хотите получить "в выхлопе" и Вам быстро помогут (а из объяснений мало что понятно-может Вашу задачу следует решать совсем иначе) Про длинные объяснения согласен. Во вложении форма с двумя кнопками. Они одинаковым способом вызывают одинаковые функции. Вся разница - одна функция находится в общем модуле а вторая - в модуле формы. Почему одна кнопка работает а вторая вызывает ошибку? ЗЫ Моя задача решена изначально, способ ее решения (всегда явно указывать аргументы при вызове функции даже если эти аргументы опциональные) очевиден. Мне любопытны нюансы, а именно почему не работает вторая кнопка... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:06 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Сорри, не приложил файл... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:08 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
sdku ПыСы: Yup ...Я так и не понял чем это лучше прямого вызова функции из события элемента (кнопки в данном случае). Какие дает преимущества? Да, дата - это аргумент, и он будет меняться. Но он реально используется только в одном варианте вызова функции из трех. И в этом варианте я ее вызову из процедуры, где и присвою этой входящей дате нужное значение. В двух других вариантах вызова функции (при других значениях dbl) дата внутри функции не используется, мне все равно какая она, пусть будет та которая задается по умолчанию (Optional ByVal istDate As Variant = #1/1/2022#) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:17 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Yup Почему одна кнопка работает а вторая вызывает ошибку? а2010 - ни одна кнопка не работает, ошибка одинаковая ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:27 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
alecko Yup, такие действия по типу макросов не прокатят - действуйте стандартным способом. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:30 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
vmag Yup Почему одна кнопка работает а вторая вызывает ошибку? а2010 - ни одна кнопка не работает, ошибка одинаковая Хмм... Чем дальше в лес тем толще партизаны... У меня а2016, но не думал что это вообще влиять должно. Ну да ладно, буду иметь в виду что либо вызывать из процедуры обработки события либо, если напрямую, то указывать все аргументы даже если они объявлены опциональными... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 22:42 |
|
Необязательные аргументы в пользовательской функции и формат вызова этой функции
|
|||
---|---|---|---|
#18+
Yup ...буду иметь в виду что либо вызывать из процедуры обработки события либо, если напрямую, то указывать все аргументы даже если они объявлены опциональными... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2021, 23:05 |
|
|
Start [/forum/topic.php?fid=45&tid=1609507&gotonew=1]: |
0ms |
get settings: |
1ms |
get forum list: |
6ms |
check forum access: |
0ms |
check topic access: |
0ms |
track hit: |
30ms |
get topic data: |
3ms |
get first new msg: |
1ms |
get forum data: |
1ms |
get page messages: |
25ms |
update_topic_read_status (1609507): 25.12.2021 23:05:39: |
0ms |
get tp. blocked users: |
1ms |
get online users: |
46ms |
check new: |
1ms |
others: | 109ms |
total: | 224ms |
0 / 0 |