Budapest Пользователь Сообщений: 6 |
#1 04.04.2023 17:56:12 Добрый день, я пытаюсь использовать решение из этой темы: https://www.planetaexcel.ru/techniques/3/52/ а именно этот код:
Но получаю ошибку: «Ошибка времени выполнения Basic. ‘449’ Аргумент является обязательным.» Скрин с ошибкой приложил. Да, у меня либра офис, я создал файл .xlsm и в нем создал этот макрос, но получаю ошибку. Подскажите пожалуйста, как исправить её. Прикрепленные файлы
Изменено: Budapest — 04.04.2023 18:10:56 |
||
Maximich Пользователь Сообщений: 522 |
Подозреваю, что у вас лишняя буква — Nothing Изменено: Maximich — 04.04.2023 17:59:57 Кто ясно мыслит, тот ясно излагает. |
Budapest Пользователь Сообщений: 6 |
#3 04.04.2023 18:11:48
Да, спасибо, поправил опечатки, но ошибка осталась |
||
Igor67 Пользователь Сообщений: 3733 |
Budapest, а у Вас точно эксель от микрософта, и Вы уверены что в Либре должен работать ВБА? Изменено: Igor67 — 04.04.2023 21:53:07 |
БМВ Модератор Сообщений: 21651 Excel 2013, 2016 |
LibreCalc 7.2.1.2 — код #1 работает без коррекции. По вопросам из тем форума, личку не читаю. |
Budapest Пользователь Сообщений: 6 |
У меня либра офис, но я без понятия как оно там работает. Изменено: Budapest — 04.04.2023 22:22:54 |
Budapest Пользователь Сообщений: 6 |
#7 04.04.2023 22:18:18
Код 1 это который? Изменено: Budapest — 04.04.2023 22:21:10 |
||
БМВ Модератор Сообщений: 21651 Excel 2013, 2016 |
#1 это из первого поста. По вопросам из тем форума, личку не читаю. |
bigorq Пользователь Сообщений: 795 |
#9 05.04.2023 10:21:29 Budapest,
придется смириться, что не все программы могут работать с VBA как MSO. А какова цель применения этого кода для вас? Просто перенести на LibreOffice или решаете какую то задачу? Изменено: bigorq — 05.04.2023 10:22:24 |
||
Budapest Пользователь Сообщений: 6 |
#10 05.04.2023 12:17:58
Похоже что так, вы правы. У меня около месяца назад закончился MS Office, и продлить его пока нет возможности из-за санкций. Поставил либру и вот такой сюрприз с макросом. Макрос этот буду использовать в табличке с моим личным финансовым учетом, чтобы быстро вносить расходы и они автоматом суммировались бы. |
||||
Budapest Пользователь Сообщений: 6 |
Мда, а макрос в либра офис, после редактирования файла и сохранения, все равно перестает работать. Эх, значит придется таки ставить MS office. |
Юрий М Модератор Сообщений: 60763 Контакты см. в профиле |
#12 05.04.2023 12:47:06
Budapest, а у нас форум по MS EXCEL. |
||
В этой статье представлена ошибка с номером Ошибка 449, известная как Аргумент не является обязательным, описанная как Количество и типы аргументов должны соответствовать ожидаемым.
О программе Runtime Ошибка 449
Время выполнения Ошибка 449 происходит, когда Windows дает сбой или падает во время запуска, отсюда и название. Это не обязательно означает, что код был каким-то образом поврежден, просто он не сработал во время выполнения. Такая ошибка появляется на экране в виде раздражающего уведомления, если ее не устранить. Вот симптомы, причины и способы устранения проблемы.
Определения (Бета)
Здесь мы приводим некоторые определения слов, содержащихся в вашей ошибке, в попытке помочь вам понять вашу проблему. Эта работа продолжается, поэтому иногда мы можем неправильно определить слово, так что не стесняйтесь пропустить этот раздел!
- Аргумент — аргумент — это значение, переданное функции, процедуре или программе командной строки.
- Соответствие — концепция программирования о поиске результатов, основанных на каком-либо поиске.
- Необязательный — неизменяемый тип, который может содержать значение или ссылку.
- Типы — Типы и системы типов используются для обеспечения уровней абстракции в программах.
- Число — Число — это математический объект, используемый для подсчета, измерения и маркировки.
Симптомы Ошибка 449 — Аргумент не является обязательным
Ошибки времени выполнения происходят без предупреждения. Сообщение об ошибке может появиться на экране при любом запуске %программы%. Фактически, сообщение об ошибке или другое диалоговое окно может появляться снова и снова, если не принять меры на ранней стадии.
Возможны случаи удаления файлов или появления новых файлов. Хотя этот симптом в основном связан с заражением вирусом, его можно отнести к симптомам ошибки времени выполнения, поскольку заражение вирусом является одной из причин ошибки времени выполнения. Пользователь также может столкнуться с внезапным падением скорости интернет-соединения, но, опять же, это не всегда так.
(Только для примера)
Причины Аргумент не является обязательным — Ошибка 449
При разработке программного обеспечения программисты составляют код, предвидя возникновение ошибок. Однако идеальных проектов не бывает, поскольку ошибки можно ожидать даже при самом лучшем дизайне программы. Глюки могут произойти во время выполнения программы, если определенная ошибка не была обнаружена и устранена во время проектирования и тестирования.
Ошибки во время выполнения обычно вызваны несовместимостью программ, запущенных в одно и то же время. Они также могут возникать из-за проблем с памятью, плохого графического драйвера или заражения вирусом. Каким бы ни был случай, проблему необходимо решить немедленно, чтобы избежать дальнейших проблем. Ниже приведены способы устранения ошибки.
Методы исправления
Ошибки времени выполнения могут быть раздражающими и постоянными, но это не совсем безнадежно, существует возможность ремонта. Вот способы сделать это.
Если метод ремонта вам подошел, пожалуйста, нажмите кнопку upvote слева от ответа, это позволит другим пользователям узнать, какой метод ремонта на данный момент работает лучше всего.
Обратите внимание: ни ErrorVault.com, ни его авторы не несут ответственности за результаты действий, предпринятых при использовании любого из методов ремонта, перечисленных на этой странице — вы выполняете эти шаги на свой страх и риск.
Метод 1 — Закройте конфликтующие программы
Когда вы получаете ошибку во время выполнения, имейте в виду, что это происходит из-за программ, которые конфликтуют друг с другом. Первое, что вы можете сделать, чтобы решить проблему, — это остановить эти конфликтующие программы.
- Откройте диспетчер задач, одновременно нажав Ctrl-Alt-Del. Это позволит вам увидеть список запущенных в данный момент программ.
- Перейдите на вкладку «Процессы» и остановите программы одну за другой, выделив каждую программу и нажав кнопку «Завершить процесс».
- Вам нужно будет следить за тем, будет ли сообщение об ошибке появляться каждый раз при остановке процесса.
- Как только вы определите, какая программа вызывает ошибку, вы можете перейти к следующему этапу устранения неполадок, переустановив приложение.
Метод 2 — Обновите / переустановите конфликтующие программы
Использование панели управления
- В Windows 7 нажмите кнопку «Пуск», затем нажмите «Панель управления», затем «Удалить программу».
- В Windows 8 нажмите кнопку «Пуск», затем прокрутите вниз и нажмите «Дополнительные настройки», затем нажмите «Панель управления»> «Удалить программу».
- Для Windows 10 просто введите «Панель управления» в поле поиска и щелкните результат, затем нажмите «Удалить программу».
- В разделе «Программы и компоненты» щелкните проблемную программу и нажмите «Обновить» или «Удалить».
- Если вы выбрали обновление, вам просто нужно будет следовать подсказке, чтобы завершить процесс, однако, если вы выбрали «Удалить», вы будете следовать подсказке, чтобы удалить, а затем повторно загрузить или использовать установочный диск приложения для переустановки. программа.
Использование других методов
- В Windows 7 список всех установленных программ можно найти, нажав кнопку «Пуск» и наведя указатель мыши на список, отображаемый на вкладке. Вы можете увидеть в этом списке утилиту для удаления программы. Вы можете продолжить и удалить с помощью утилит, доступных на этой вкладке.
- В Windows 10 вы можете нажать «Пуск», затем «Настройка», а затем — «Приложения».
- Прокрутите вниз, чтобы увидеть список приложений и функций, установленных на вашем компьютере.
- Щелкните программу, которая вызывает ошибку времени выполнения, затем вы можете удалить ее или щелкнуть Дополнительные параметры, чтобы сбросить приложение.
Метод 3 — Обновите программу защиты от вирусов или загрузите и установите последнюю версию Центра обновления Windows.
Заражение вирусом, вызывающее ошибку выполнения на вашем компьютере, необходимо немедленно предотвратить, поместить в карантин или удалить. Убедитесь, что вы обновили свою антивирусную программу и выполнили тщательное сканирование компьютера или запустите Центр обновления Windows, чтобы получить последние определения вирусов и исправить их.
Метод 4 — Переустановите библиотеки времени выполнения
Вы можете получить сообщение об ошибке из-за обновления, такого как пакет MS Visual C ++, который может быть установлен неправильно или полностью. Что вы можете сделать, так это удалить текущий пакет и установить новую копию.
- Удалите пакет, выбрав «Программы и компоненты», найдите и выделите распространяемый пакет Microsoft Visual C ++.
- Нажмите «Удалить» в верхней части списка и, когда это будет сделано, перезагрузите компьютер.
- Загрузите последний распространяемый пакет от Microsoft и установите его.
Метод 5 — Запустить очистку диска
Вы также можете столкнуться с ошибкой выполнения из-за очень нехватки свободного места на вашем компьютере.
- Вам следует подумать о резервном копировании файлов и освобождении места на жестком диске.
- Вы также можете очистить кеш и перезагрузить компьютер.
- Вы также можете запустить очистку диска, открыть окно проводника и щелкнуть правой кнопкой мыши по основному каталогу (обычно это C
- Щелкните «Свойства», а затем — «Очистка диска».
Метод 6 — Переустановите графический драйвер
Если ошибка связана с плохим графическим драйвером, вы можете сделать следующее:
- Откройте диспетчер устройств и найдите драйвер видеокарты.
- Щелкните правой кнопкой мыши драйвер видеокарты, затем нажмите «Удалить», затем перезагрузите компьютер.
Метод 7 — Ошибка выполнения, связанная с IE
Если полученная ошибка связана с Internet Explorer, вы можете сделать следующее:
- Сбросьте настройки браузера.
- В Windows 7 вы можете нажать «Пуск», перейти в «Панель управления» и нажать «Свойства обозревателя» слева. Затем вы можете перейти на вкладку «Дополнительно» и нажать кнопку «Сброс».
- Для Windows 8 и 10 вы можете нажать «Поиск» и ввести «Свойства обозревателя», затем перейти на вкладку «Дополнительно» и нажать «Сброс».
- Отключить отладку скриптов и уведомления об ошибках.
- В том же окне «Свойства обозревателя» можно перейти на вкладку «Дополнительно» и найти пункт «Отключить отладку сценария».
- Установите флажок в переключателе.
- Одновременно снимите флажок «Отображать уведомление о каждой ошибке сценария», затем нажмите «Применить» и «ОК», затем перезагрузите компьютер.
Если эти быстрые исправления не работают, вы всегда можете сделать резервную копию файлов и запустить восстановление на вашем компьютере. Однако вы можете сделать это позже, когда перечисленные здесь решения не сработают.
Другие языки:
How to fix Error 449 (Argument not optional) — The number and types of arguments must match those expected.
Wie beheben Fehler 449 (Argument nicht optional) — Anzahl und Typen der Argumente müssen mit den erwarteten übereinstimmen.
Come fissare Errore 449 (Argomento non facoltativo) — Il numero e i tipi di argomenti devono corrispondere a quelli previsti.
Hoe maak je Fout 449 (Argument niet optioneel) — Het aantal en de soorten argumenten moeten overeenkomen met de verwachte.
Comment réparer Erreur 449 (Argument non facultatif) — Le nombre et les types d’arguments doivent correspondre à ceux attendus.
어떻게 고치는 지 오류 449 (선택 사항이 아닌 인수) — 인수의 수와 유형은 예상되는 것과 일치해야 합니다.
Como corrigir o Erro 449 (Argumento não opcional) — O número e os tipos de argumentos devem corresponder aos esperados.
Hur man åtgärdar Fel 449 (Argument inte valfritt) — Antalet och typerna av argument måste matcha de förväntade.
Jak naprawić Błąd 449 (Argument nie jest opcjonalny) — Liczba i typy argumentów muszą być zgodne z oczekiwanymi.
Cómo arreglar Error 449 (Argumento no opcional) — El número y los tipos de argumentos deben coincidir con los esperados.
Об авторе: Фил Харт является участником сообщества Microsoft с 2010 года. С текущим количеством баллов более 100 000 он внес более 3000 ответов на форумах Microsoft Support и создал почти 200 новых справочных статей в Technet Wiki.
Следуйте за нами:
Последнее обновление:
02/02/22 02:09 : Пользователь Linux проголосовал за то, что метод восстановления 1 работает для него.
Рекомендуемый инструмент для ремонта:
Этот инструмент восстановления может устранить такие распространенные проблемы компьютера, как синие экраны, сбои и замораживание, отсутствующие DLL-файлы, а также устранить повреждения от вредоносных программ/вирусов и многое другое путем замены поврежденных и отсутствующих системных файлов.
ШАГ 1:
Нажмите здесь, чтобы скачать и установите средство восстановления Windows.
ШАГ 2:
Нажмите на Start Scan и позвольте ему проанализировать ваше устройство.
ШАГ 3:
Нажмите на Repair All, чтобы устранить все обнаруженные проблемы.
СКАЧАТЬ СЕЙЧАС
Совместимость
Требования
1 Ghz CPU, 512 MB RAM, 40 GB HDD
Эта загрузка предлагает неограниченное бесплатное сканирование ПК с Windows. Полное восстановление системы начинается от $19,95.
ID статьи: ACX02494RU
Применяется к: Windows 10, Windows 8.1, Windows 7, Windows Vista, Windows XP, Windows 2000
- Remove From My Forums
-
Question
-
I am getting this error when debugging a VB application. The method that is being called when I get this does not have any arguments.
Definitions in code are as follows with names changed to protect the guilty
[From the ActiveX code]
MyControlCtl.cpp(161): DISP_FUNCTION(CMyControlCtrl, «BadArgmentFunction», BadArgmentFunction, VT_I4, VTS_NONE)
MyControlCtl.cpp(1213):long CMyControlCtrl::BadArgmentFunction()
MyControlCtl.h(191): afx_msg long BadArgmentFunction();
MyControlCtl.h(416): dispidBadArgmentFunction = 108L,[From VB application]
Public Function BadArgmentFunction() As returnCodes
On Error GoTo ErrHandler
Dim lresult As LongoErrHandler.Message «TO», «BadArgmentFunction», «()»
lresult = myControl.BadArgmentFunction ‘ when this executes, I get the error «Run-time error ‘449’: Argument not optional»
BadArgmentFunction= lresult
oErrHandler.Message «TO», «BadArgmentFunction», «Returned » & CStr(BadArgmentFunction)
Exit FunctionErrHandler:
oErrHandler.Message «Error», «BadArgmentFunction», Err.Description, Err.Number
Resume NextEnd Function
The question is, if the method is not defined to accept argments, then why am I having a debug assertion while debugging that says that the arguments are not optional?
Answers
-
Found the problem. It was that in the header file in one order where the afx_msg macro is interpreted and in the source file where the DISP_FUNCTION macro was interpreted, it was swapped with another function name that took a parameter.
Kind of dicey if you ask me but oh well. Chock one up to experience.
- Marked as answer by
Monday, July 6, 2009 8:04 AM
- Marked as answer by
- Remove From My Forums
-
Question
-
I am getting this error when debugging a VB application. The method that is being called when I get this does not have any arguments.
Definitions in code are as follows with names changed to protect the guilty
[From the ActiveX code]
MyControlCtl.cpp(161): DISP_FUNCTION(CMyControlCtrl, «BadArgmentFunction», BadArgmentFunction, VT_I4, VTS_NONE)
MyControlCtl.cpp(1213):long CMyControlCtrl::BadArgmentFunction()
MyControlCtl.h(191): afx_msg long BadArgmentFunction();
MyControlCtl.h(416): dispidBadArgmentFunction = 108L,[From VB application]
Public Function BadArgmentFunction() As returnCodes
On Error GoTo ErrHandler
Dim lresult As LongoErrHandler.Message «TO», «BadArgmentFunction», «()»
lresult = myControl.BadArgmentFunction ‘ when this executes, I get the error «Run-time error ‘449’: Argument not optional»
BadArgmentFunction= lresult
oErrHandler.Message «TO», «BadArgmentFunction», «Returned » & CStr(BadArgmentFunction)
Exit FunctionErrHandler:
oErrHandler.Message «Error», «BadArgmentFunction», Err.Description, Err.Number
Resume NextEnd Function
The question is, if the method is not defined to accept argments, then why am I having a debug assertion while debugging that says that the arguments are not optional?
Answers
-
Found the problem. It was that in the header file in one order where the afx_msg macro is interpreted and in the source file where the DISP_FUNCTION macro was interpreted, it was swapped with another function name that took a parameter.
Kind of dicey if you ask me but oh well. Chock one up to experience.
- Marked as answer by
Monday, July 6, 2009 8:04 AM
- Marked as answer by
- Remove From My Forums
-
Question
-
I am getting this error when debugging a VB application. The method that is being called when I get this does not have any arguments.
Definitions in code are as follows with names changed to protect the guilty
[From the ActiveX code]
MyControlCtl.cpp(161): DISP_FUNCTION(CMyControlCtrl, «BadArgmentFunction», BadArgmentFunction, VT_I4, VTS_NONE)
MyControlCtl.cpp(1213):long CMyControlCtrl::BadArgmentFunction()
MyControlCtl.h(191): afx_msg long BadArgmentFunction();
MyControlCtl.h(416): dispidBadArgmentFunction = 108L,[From VB application]
Public Function BadArgmentFunction() As returnCodes
On Error GoTo ErrHandler
Dim lresult As LongoErrHandler.Message «TO», «BadArgmentFunction», «()»
lresult = myControl.BadArgmentFunction ‘ when this executes, I get the error «Run-time error ‘449’: Argument not optional»
BadArgmentFunction= lresult
oErrHandler.Message «TO», «BadArgmentFunction», «Returned » & CStr(BadArgmentFunction)
Exit FunctionErrHandler:
oErrHandler.Message «Error», «BadArgmentFunction», Err.Description, Err.Number
Resume NextEnd Function
The question is, if the method is not defined to accept argments, then why am I having a debug assertion while debugging that says that the arguments are not optional?
Answers
-
Found the problem. It was that in the header file in one order where the afx_msg macro is interpreted and in the source file where the DISP_FUNCTION macro was interpreted, it was swapped with another function name that took a parameter.
Kind of dicey if you ask me but oh well. Chock one up to experience.
- Marked as answer by
Monday, July 6, 2009 8:04 AM
- Marked as answer by
Номер ошибки: | Ошибка во время выполнения 449 | |
Название ошибки: | Argument not optional | |
Описание ошибки: | The number and types of arguments must match those expected. | |
Разработчик: | Microsoft Corporation | |
Программное обеспечение: | Windows Operating System | |
Относится к: | Windows XP, Vista, 7, 8, 10, 11 |
Сводка «Argument not optional
Как правило, специалисты по ПК называют «Argument not optional» как тип «ошибки времени выполнения». Разработчики Microsoft Corporation обычно оценивают Windows Operating System с помощью серии модулей для удаления ошибок в соответствии с отраслевыми стандартами. Хотя эти превентивные действия принимаются, иногда ошибки, такие как ошибка 449, будут пропущены.
После первоначального выпуска пользователи Windows Operating System могут столкнуться с сообщением «The number and types of arguments must match those expected.» во время запуска программы. Сообщение об этой ошибке 449 позволит разработчикам обновить свое приложение и исправить любые ошибки, которые могут вызвать его. Затем Microsoft Corporation может исправить эти ошибки в исходном коде и подготовить обновление для загрузки. Чтобы исправить любые документированные ошибки (например, ошибку 449) в системе, разработчик может использовать комплект обновления Windows Operating System.
Сбой во время запуска Windows Operating System или во время выполнения, как правило, когда вы столкнетесь с «Argument not optional». Три распространенные причины, по которым ошибки во время выполнения, такие как всплывающее окно ошибки 449:
Ошибка 449 Crash — программа обнаружила ошибку 449 из-за указанной задачи и завершила работу программы. Это возникает, когда Windows Operating System не работает должным образом или не знает, какой вывод будет подходящим.
Утечка памяти «Argument not optional» — ошибка 449 утечка памяти приводит к тому, что Windows Operating System использует все больше памяти, что делает ваш компьютер запуск медленнее и замедляет вывод системы. Возможные причины включают сбой Microsoft Corporation для девыделения памяти в программе или когда плохой код выполняет «бесконечный цикл».
Ошибка 449 Logic Error — Вы можете столкнуться с логической ошибкой, когда программа дает неправильные результаты, даже если пользователь указывает правильное значение. Когда точность исходного кода Microsoft Corporation низкая, он обычно становится источником ошибок.
Как правило, такие Microsoft Corporation ошибки возникают из-за повреждённых или отсутствующих файлов Argument not optional, а иногда — в результате заражения вредоносным ПО в настоящем или прошлом, что оказало влияние на Windows Operating System. Большую часть проблем, связанных с данными файлами, можно решить посредством скачивания и установки последней версии файла Microsoft Corporation. Запуск сканирования реестра после замены файла, из-за которого возникает проблема, позволит очистить все недействительные файлы Argument not optional, расширения файлов или другие ссылки на файлы, которые могли быть повреждены в результате заражения вредоносным ПО.
Типичные ошибки Argument not optional
Argument not optional Проблемы, связанные с Windows Operating System:
- «Ошибка программного обеспечения Argument not optional. «
- «Недопустимый файл Argument not optional. «
- «Извините за неудобства — Argument not optional имеет проблему. «
- «К сожалению, мы не можем найти Argument not optional. «
- «Argument not optional не может быть найден. «
- «Ошибка запуска программы: Argument not optional.»
- «Не удается запустить Argument not optional. «
- «Ошибка Argument not optional. «
- «Неверный путь к программе: Argument not optional. «
Эти сообщения об ошибках Microsoft Corporation могут появляться во время установки программы, в то время как программа, связанная с Argument not optional (например, Windows Operating System) работает, во время запуска или завершения работы Windows, или даже во время установки операционной системы Windows. Выделение при возникновении ошибок Argument not optional имеет первостепенное значение для поиска причины проблем Windows Operating System и сообщения о них вMicrosoft Corporation за помощью.
Эпицентры Argument not optional Головные боли
Эти проблемы Argument not optional создаются отсутствующими или поврежденными файлами Argument not optional, недопустимыми записями реестра Windows Operating System или вредоносным программным обеспечением.
В частности, проблемы с Argument not optional, вызванные:
- Поврежденные ключи реестра Windows, связанные с Argument not optional / Windows Operating System.
- Вирус или вредоносное ПО, повреждающее Argument not optional.
- Argument not optional злонамеренно удален (или ошибочно) другим изгоем или действительной программой.
- Argument not optional конфликтует с другой программой (общим файлом).
- Windows Operating System (Argument not optional) поврежден во время загрузки или установки.
Продукт Solvusoft
Загрузка
WinThruster 2022 — Проверьте свой компьютер на наличие ошибок.
Совместима с Windows 2000, XP, Vista, 7, 8, 10 и 11
Установить необязательные продукты — WinThruster (Solvusoft) | Лицензия | Политика защиты личных сведений | Условия | Удаление
Контекст . Я пытаюсь динамически вызывать метод через функцию Application.Run
VBA и динамически передавать параметры в метод. Больше доказательства концепции, чем фактический вариант использования.
< Сильный > Код:
Public Sub Test()
Call MethodDynamically("MethodToBeCalled", "This doesnt, work")
End Sub
Public Sub MethodDynamically(MethodName As String, Params As String)
Application.Run MethodName, Params
End Sub
Public Sub MethodToBeCalled(Param1 As String, Param2 As String)
Debug.Print Param1 & " " & Param2
End Sub
Ошибка: запуск метода Test
, который я получаю Run-time error '449': Argument not optional
в строке Application.Run
в методе MethodDynamically
.
Ожидание . Я хочу, чтобы при запуске метода Test
сработали MethodToBeCalled
с This doesnt
и work
передачей в качестве параметров. Результат будет This doesnt work
в «Немедленном окне».
2 ответа
Public Sub Test()
Call MethodDynamically("MethodToBeCalled", "This doesnt, work")
End Sub
Public Sub MethodDynamically(MethodName As String, Params As String, Optional Params2 As String)
Application.Run MethodName, Params, Params2
End Sub
Public Sub MethodToBeCalled(Param1 As String, Param2 As String)
Debug.Print Param1 & " " & Param2
End Sub
0
Xabier
24 Ноя 2017 в 10:01
У вас есть 2 варианта.
1 разбить строку «Это не так, работать на 2 параметра
Public Sub TestThis()
Call MethodDynamically("MethodToBeCalled", "This doesnt", "work")
End Sub
Public Sub MethodDynamically(MethodName As String, Param1 As String, Param2 As String)
Application.Run MethodName, Params
End Sub
Public Sub MethodToBeCalled(Param1 As String, Optional Param2 As String)
Debug.Print Param1 & ", " & Param2
End Sub
Или используйте необязательные параметры:
Public Sub TestThis()
Call MethodDynamically("MethodToBeCalled", "This doesnt, work")
End Sub
Public Sub MethodDynamically(MethodName As String, Params As String)
Application.Run MethodName, Params
End Sub
Public Sub MethodToBeCalled(Param1 As String, Optional Param2 As String)
Debug.Print Param1 & ", " & Param2
End Sub
РЕДАКТИРОВАТЬ: попробуйте это.
Public Sub TestThis()
Call MethodDynamically("MethodToBeCalled", "This doesnt, work")
End Sub
Public Sub MethodDynamically(MethodName As String, Optional params As String = "")
If params = "" Then Application.Run MethodName
Select Case selectParamNumbers(params)
Case 0
paramArr = paramSplit(params)
Application.Run MethodName, paramArr(0)
Case 1
paramArr = paramSplit(params)
Application.Run MethodName, paramArr(0), paramArr(1)
Case 2
paramArr = paramSplit(params)
Application.Run MethodName, paramArr(0), paramArr(1), paramArr(2)
'And so on...
End Select
End Sub
Public Function paramSplit(param As String) As Variant
paramSplit = Split(param, delimiter:=", ")
End Function
Public Function selectParamNumbers(param As String) As Long
Dim paramAmount() As String
paramAmount = Split(param, delimiter:=",")
selectParamNumbers = UBound(paramAmount)
End Function
Public Sub MethodToBeCalled(Param1 As String, Optional Param2 As String)
Debug.Print Param1 & " " & Param2
End Sub
1
David Feltendal
24 Ноя 2017 в 11:31
- Remove From My Forums
-
Question
-
I am getting this error when debugging a VB application. The method that is being called when I get this does not have any arguments.
Definitions in code are as follows with names changed to protect the guilty
[From the ActiveX code]
MyControlCtl.cpp(161): DISP_FUNCTION(CMyControlCtrl, «BadArgmentFunction», BadArgmentFunction, VT_I4, VTS_NONE)
MyControlCtl.cpp(1213):long CMyControlCtrl::BadArgmentFunction()
MyControlCtl.h(191): afx_msg long BadArgmentFunction();
MyControlCtl.h(416): dispidBadArgmentFunction = 108L,[From VB application]
Public Function BadArgmentFunction() As returnCodes
On Error GoTo ErrHandler
Dim lresult As LongoErrHandler.Message «TO», «BadArgmentFunction», «()»
lresult = myControl.BadArgmentFunction ‘ when this executes, I get the error «Run-time error ‘449’: Argument not optional»
BadArgmentFunction= lresult
oErrHandler.Message «TO», «BadArgmentFunction», «Returned » & CStr(BadArgmentFunction)
Exit FunctionErrHandler:
oErrHandler.Message «Error», «BadArgmentFunction», Err.Description, Err.Number
Resume NextEnd Function
The question is, if the method is not defined to accept argments, then why am I having a debug assertion while debugging that says that the arguments are not optional?
Answers
-
Found the problem. It was that in the header file in one order where the afx_msg macro is interpreted and in the source file where the DISP_FUNCTION macro was interpreted, it was swapped with another function name that took a parameter.
Kind of dicey if you ask me but oh well. Chock one up to experience.
-
Marked as answer by
Monday, July 6, 2009 8:04 AM
-
Marked as answer by
Public Function RETURN_Equipment(Optional category As String) As Collection
Dim config As classConfiguration
Set config = New classConfiguration
Dim item As classItem
Set item = New classItem
Dim myCollection As Collection
Set myCollection = New Collection
For Each config In Configurations
For Each item In config.colItems
If IsMissing(category) Then
myCollection.add item
ElseIf InStr(category, "mainframe") <> 0 And item.category = "mainframe" Then
myCollection.add item
MsgBox "Fired!"
ElseIf category = "accessory" And item.category = "accessory" Then
Else
End If
Next
Next
RETURN_Equipment = myCollection
End Function
I keep getting
Compile error:
Argument not optional
I get the error on the last line
RETURN_Equipment = myCollection
I understand the error message, its telling me I did not fill out a parameter. But I only have one parameter, and I’ve declared it optional. It looks like the code thinks I’m trying to call the function from the function?
What gives?
GSerg
75.5k17 gold badges158 silver badges342 bronze badges
asked May 9, 2014 at 21:14
3
Anytime you assign an object you need to use the set
keyword.
set RETURN_Equipment = myCollection
answered May 9, 2014 at 21:16
BradBrad
11.9k4 gold badges45 silver badges72 bronze badges
1
I was getting this error because I was using the wrong function name when trying to return a result from a function. I was doing this:
Function MyFuncA(arg as String)
MyFuncB = arg 'The problem is I'm using MyFuncB instead of MyFuncA
End Function
This happened because I copied a function from somewhere else and changed the name, but not the return statement. This is not the OP’s problem, but I was getting the same error message.
answered Jul 8, 2016 at 19:15
user2023861user2023861
7,9509 gold badges57 silver badges85 bronze badges
Because you’ve specified the Optional Parameter as a string it will default to an empty string if you’ve not specified a value.
This means it can’t be missing
If you’d specified it as
Public Function RETURN_Equipment(Optional category) As Collection
It would be a variant and that could be missing, although you’d also be able to mess things up by passing non string variants as the category parameter
The best course of action is probably to replace
If IsMissing(category) Then
with
If category = "" Then
And as Brad has pointed out you’ll need to use Set
Set RETURN_Equipment = myCollection
For full details check this
http://msdn.microsoft.com/en-us/library/office/gg251721%28v=office.15%29.aspx
answered May 9, 2014 at 22:23
Tom PageTom Page
1,2111 gold badge7 silver badges8 bronze badges
1
Я не мог понять, в чем проблема
Sub Reportstart(oEvent As Object)
Dim oFeld As Object
Dim oForm As Object
Dim oDocument As Object
Dim oDocView As Object
Dim Arg()
oField = oEvent.Source.Model
oForm = oField.Parent
sURL = oForm.DataSourceName
oDocument = StarDesktop.loadComponentFromURL(sURL, "C:UsersNamelessDesktopLatest.odb", 0, Arg() )
oDocView = oDocument.CurrentController.Frame.ContainerWindow
oDocView.Visible = False
oDocument.getCurrentController().connect
Wait(100)
oDocument.ReportDocuments.getByName("report_student").open
oDocument.close(True)
End Sub'
Ошибка — это ошибка времени выполнения BASIC. Аргумент не является обязательным.
1 ответ
Лучший ответ
Reportstart
требует аргумента oEvent
, и, как вы его выполнили, подпрограмме не было дано никакого аргумента.
Макрос был разработан для вызова из обработчика событий элемента управления, например, Execute action
кнопки в базовой форме. Возможно, вместо этого вы выполнили подпрограмму из LibreOffice Basic IDE.
По теме: https://ask.libreoffice.org/en / question / 192344 / аргумент-не-необязательный /
0
Jim K
24 Июн 2020 в 17:53