Ошибка времени выполнения basic аргумент является обязательным

Удалить содержимое листа макросом

Автор Nikem79, 16 июля 2012, 15:20

0 Пользователи и 1 гость просматривают эту тему.

Здравствуйте, подскажите пожалуйста как можно макросом удалить содержимое листа по его имени? Или хотя бы просто содержимое активного листа


Добро пожаловать на форум!
Есть несколько способов.
Самый простой и надежный — удалить лист по имени (если он был) и создать новый с таким же именем.

Sub reCreateSheet(SName As String)
Dim oSheets As Variant
  oSheets = ThisComponent.getSheets()
  If oSheets.hasByName(SName) Then oSheets.removeByName(SName)
  oSheets.insertByName(SName, 0)
End Sub

Чуть сложнее — выбрать лист, вычислить область, в которой есть данные, и для этого диапазона выполнить метод .clearContents. Зато в этом случае можно, например, удалить только данные, а всё форматирование оставить на месте…


спасибо за помощь, однако

Ругается на If oSheets.hasByName(SName) Then oSheets.removeByName(SName)
выдаёт
ошибку времени выполнения Basic
Аргумент является обязательным

я на либре офисе, должен подойти этот макрос?..


и кстати вообще эту команду не воспринимает oSheets.removeByName(SName)


Ты, наверное, просто пытаешься этот макрос выполнить. А ему нужен параметр — имя листа. Допиши процедуру:

Sub testClear
   reCreateSheet("Лист2") ' или какое-то другое имя листа
End Sub

и уже этот макрос запускай на выполнение


Долгим методом подбора наковырял работоспособный код:

Sub sequencialFiles
Dim oDoc as Object
oDoc = ThisComponent

  If oDoc.Sheets.hasByName("SName") Then
    oDoc.Sheets.removeByName("SName")
  EndIf

  oSheet = oDoc.createInstance ("com.sun.star.sheet.Spreadsheet")
oDoc.Sheets.insertByName ("SName", oSheet)

End Sub

Спасибо JohnSUN!


Что-то вас, ребята, заносит не туда!
Всё же очень просто:

Sub Main ' запускать этот макрос!
SName="Лист1"
reCreateSheet(SName)
End Sub

Sub reCreateSheet(SName As String)
Dim oSheets As Variant
  oSheets = ThisComponent.getSheets()
  If oSheets.hasByName(SName) Then oSheets.removeByName(SName)
  oSheets.insertNewByName(SName, 0) ' 0 (в начале списка листов) - положение нового листа в книге
End Sub


Hasim, спасибо за вариант!

Вообще, честно говоря, я расчитывал что есть какая-нибудь команда очистить лист, очистить ячейку, очистить документ, строку столбец и тд) Очень странно что нельзя сделать этого одной командой, а приходится через удаление листа и восстановления его снова.


Подскажите ещё пожалуйста как присвоить переменной имя текущего листа?

То есть мне нужно проверить на каком листе выделяются ячейки, и в зависимости от имени листа раскидывать выделенные данные по нужным ячейкам на новом листе.


Цитата: Nikem79 от 17 июля 2012, 09:45
Вообще, честно говоря, я расчитывал что есть какая-нибудь команда очистить лист, очистить ячейку, очистить документ, строку столбец и тд) Очень странно что нельзя сделать этого одной командой, а приходится через удаление листа и восстановления его снова.

Почему нельзя, очень даже можно. См. ответы JohnSUN.

Цитата: JohnSUN от 16 июля 2012, 17:29
Есть несколько способов.
Самый простой и надежный — удалить лист по имени (если он был) и создать новый с таким же именем.

Чуть сложнее — выбрать лист, вычислить область, в которой есть данные, и для этого диапазона выполнить метод .clearContents. Зато в этом случае можно, например, удалить только данные, а всё форматирование оставить на месте…

Вот этот второй метод и нужен.
Правда, JohnSUN почему-то пожадничал и не стал его описывать. Но если его попросить хорошенько, он опишет очень даже подробно.


Для этого понадобится как-то выделять данные, а запись макроса не поддерживает выделения мышью. Удалось выделять только курсором для записи макроса, однако код убойной длины получился. На выделение каждой ячейки штук 6 строк и цикл применить у меня не получилось… Не разобрался. В любом случае слишком долго он выполняется, как-то криво тоже.

Но это опять же нужно выделять область, а я говорил про возможность очистки всего листа…


Таки, оказалось принципиально не удаление всего листа и создание заново, а именно стирание содержимого, так как при удалении и создании нового листа теряются ссылки ведущие на него с других листов!..

Актуально очистка данных всего листа

помогите пожалуйста


А запись с помощью макрорекордера последовательности нажатий клавиш Ctrl+A (выделить весь лист) — BackSpace (окно чистки) не сработала?
У меня получилось такое:

sub clearCurrentSheet
dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:SelectAll", "", 0, Array())
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "A"
dispatcher.executeDispatch(document, ".uno:Delete", "", 0, args1())
end sub

Если выделить несколько листов и запустить макрос — почистит все выделенные…


Странно, когда я выделял CTRL+A и удалял содержимое, он мне создал макрос с удалением листа и созданием его заново… Щас попробую ваш макрос, благодарю!


Новая проблема возникла, мой макрос должен копировать выделенные строчки из одного листа в другой, так вот когда лист очищается, снимается выделение с исходного листа и выделяется диапазон на новом листе для удаления. И далее по коду после очистки он пытается скопировать всё сам в себя)))

Теперь думаю как это обойти…


  • Форум поддержки пользователей LibreOffice, Apache OpenOffice

  • Главная категория

  • Calc

  • Удалить содержимое листа макросом

 

Budapest

Пользователь

Сообщений: 6
Регистрация: 04.04.2023

#1

04.04.2023 17:56:12

Добрый день, я пытаюсь использовать решение из этой темы:

https://www.planetaexcel.ru/techniques/3/52/

а именно этот код:

Код
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
 
    If Not Intersect(Target, Range("A1:A10")) Is Nothing Then
        If IsNumeric(Target.Value) Then
            Application.EnableEvents = False
            Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value
            Application.EnableEvents = True
        End If
    End If
End Sub

Но получаю ошибку: «Ошибка времени выполнения Basic. ‘449’ Аргумент является обязательным.»

Скрин с ошибкой приложил.

Да, у меня либра офис, я создал файл .xlsm и в нем создал этот макрос, но получаю ошибку. Подскажите пожалуйста, как исправить её.

Прикрепленные файлы

  • Screenshot_4.jpg (81.72 КБ)

Изменено: Budapest04.04.2023 18:10:56

 

Maximich

Пользователь

Сообщений: 574
Регистрация: 28.08.2016

Подозреваю, что у вас лишняя буква — Nothing

Изменено: Maximich04.04.2023 17:59:57

Кто ясно мыслит, тот ясно излагает.

 

Budapest

Пользователь

Сообщений: 6
Регистрация: 04.04.2023

#3

04.04.2023 18:11:48

Цитата
написал:
Подозреваю, что у вас лишняя буква — Noth ing

Да, спасибо, поправил опечатки, но ошибка осталась

 

Igor67

Пользователь

Сообщений: 3736
Регистрация: 21.12.2012

Budapest, а у Вас точно эксель от микрософта, и Вы уверены что в Либре должен работать ВБА?  

Изменено: Igor6704.04.2023 21:53:07

 

БМВ

Модератор

Сообщений: 21915
Регистрация: 28.12.2016

Excel 2013, 2016

LibreCalc 7.2.1.2 — код  #1 работает без коррекции.

По вопросам из тем форума, личку не читаю.

 

Budapest

Пользователь

Сообщений: 6
Регистрация: 04.04.2023

У меня либра офис, но я без понятия как оно там работает.
Оказалось что в форматах xlsx\xlsm макрос не сохраняется,  т.е. если создать макрос, сохранить, закрыть файл и снова открыть, макрос исчезает. И я просто обескуражен этим фактом.

Изменено: Budapest04.04.2023 22:22:54

 

Budapest

Пользователь

Сообщений: 6
Регистрация: 04.04.2023

#7

04.04.2023 22:18:18

Цитата
написал:
LibreCalc 7.2.1.2 — код  #1 работает без коррекции.

Код 1 это который?
У меня версия calc 7.5.1.2

Изменено: Budapest04.04.2023 22:21:10

 

БМВ

Модератор

Сообщений: 21915
Регистрация: 28.12.2016

Excel 2013, 2016

#1 это из первого поста.
Да, после записи коверкается файл — это факт.

По вопросам из тем форума, личку не читаю.

 

bigorq

Пользователь

Сообщений: 885
Регистрация: 26.04.2018

#9

05.04.2023 10:21:29

Budapest,

Цитата
Budapest написал:
в форматах xlsx\xlsm макрос не сохраняется,  … И я просто обескуражен этим фактом.

придется смириться, что не все программы могут работать с VBA как MSO.  А какова цель применения этого кода для вас? Просто перенести на  LibreOffice или решаете какую то задачу?
Да, первоначальная ошибка 449 из-за того что просто запускаете макрос, его нужно повесить на событие листа «изменение ячейки»

Изменено: bigorq05.04.2023 10:22:24

 

Budapest

Пользователь

Сообщений: 6
Регистрация: 04.04.2023

#10

05.04.2023 12:17:58

Цитата
написал:
Budapest,

Цитата
Budapest написал:
в форматах xlsx\xlsm макрос не сохраняется,  … И я просто обескуражен этим фактом.

придется смириться, что не все программы могут работать с VBA как MSO.  А какова цель применения этого кода для вас? Просто перенести на  LibreOffice или решаете какую то задачу?
Да, первоначальная ошибка 449 из-за того что просто запускаете макрос, его нужно повесить на событие листа «изменение ячейки»

Похоже что так, вы правы. У меня около месяца назад закончился MS Office, и продлить его пока нет возможности из-за санкций. Поставил либру и вот такой сюрприз с макросом. Макрос этот буду использовать в табличке с моим личным финансовым учетом, чтобы быстро вносить расходы и они автоматом суммировались бы.
Я решил проблему так, что просто попросил товарища с MS office создать файлик xlsm с этим макросом, тогда он норм работает и в либре офисе.
Благодарю всех за помощь!  

 

Budapest

Пользователь

Сообщений: 6
Регистрация: 04.04.2023

Мда, а макрос в либра офис, после редактирования файла и сохранения, все равно перестает работать. Эх, значит придется таки ставить MS office.
Либра с VBA не работает нормально.

 

Юрий М

Модератор

Сообщений: 60912
Регистрация: 14.09.2012

Контакты см. в профиле

#12

05.04.2023 12:47:06

Цитата
Budapest написал: У меня либра офис,

Budapest,  а у нас форум по MS EXCEL.

В этой статье представлена ошибка с номером Ошибка 449, известная как Аргумент не является обязательным, описанная как Количество и типы аргументов должны соответствовать ожидаемым.

О программе Runtime Ошибка 449

Время выполнения Ошибка 449 происходит, когда Windows дает сбой или падает во время запуска, отсюда и название. Это не обязательно означает, что код был каким-то образом поврежден, просто он не сработал во время выполнения. Такая ошибка появляется на экране в виде раздражающего уведомления, если ее не устранить. Вот симптомы, причины и способы устранения проблемы.

Определения (Бета)

Здесь мы приводим некоторые определения слов, содержащихся в вашей ошибке, в попытке помочь вам понять вашу проблему. Эта работа продолжается, поэтому иногда мы можем неправильно определить слово, так что не стесняйтесь пропустить этот раздел!

  • Аргумент — аргумент — это значение, переданное функции, процедуре или программе командной строки.
  • Соответствие — концепция программирования о поиске результатов, основанных на каком-либо поиске.
  • Необязательный — неизменяемый тип, который может содержать значение или ссылку.
  • Типы — Типы и системы типов используются для обеспечения уровней абстракции в программах.
  • Число — Число — это математический объект, используемый для подсчета, измерения и маркировки.
Симптомы Ошибка 449 — Аргумент не является обязательным

Ошибки времени выполнения происходят без предупреждения. Сообщение об ошибке может появиться на экране при любом запуске %программы%. Фактически, сообщение об ошибке или другое диалоговое окно может появляться снова и снова, если не принять меры на ранней стадии.

Возможны случаи удаления файлов или появления новых файлов. Хотя этот симптом в основном связан с заражением вирусом, его можно отнести к симптомам ошибки времени выполнения, поскольку заражение вирусом является одной из причин ошибки времени выполнения. Пользователь также может столкнуться с внезапным падением скорости интернет-соединения, но, опять же, это не всегда так.

Fix Аргумент не является обязательным (Error Ошибка 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, вы можете сделать следующее:

  1. Сбросьте настройки браузера.
    • В Windows 7 вы можете нажать «Пуск», перейти в «Панель управления» и нажать «Свойства обозревателя» слева. Затем вы можете перейти на вкладку «Дополнительно» и нажать кнопку «Сброс».
    • Для Windows 8 и 10 вы можете нажать «Поиск» и ввести «Свойства обозревателя», затем перейти на вкладку «Дополнительно» и нажать «Сброс».
  2. Отключить отладку скриптов и уведомления об ошибках.
    • В том же окне «Свойства обозревателя» можно перейти на вкладку «Дополнительно» и найти пункт «Отключить отладку сценария».
    • Установите флажок в переключателе.
    • Одновременно снимите флажок «Отображать уведомление о каждой ошибке сценария», затем нажмите «Применить» и «ОК», затем перезагрузите компьютер.

Если эти быстрые исправления не работают, вы всегда можете сделать резервную копию файлов и запустить восстановление на вашем компьютере. Однако вы можете сделать это позже, когда перечисленные здесь решения не сработают.

Другие языки:

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.

The Author Об авторе: Фил Харт является участником сообщества Microsoft с 2010 года. С текущим количеством баллов более 100 000 он внес более 3000 ответов на форумах Microsoft Support и создал почти 200 новых справочных статей в Technet Wiki.

Следуйте за нами: Facebook Youtube Twitter

Последнее обновление:

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

Icon Ex Номер ошибки: Ошибка во время выполнения 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

I could not figure out whats the problem is

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:\Users\Nameless\Desktop\Latest.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'

The error is BASIC runtime error.
Argument is not optional.

  • libreoffice-base

asked Jun 24, 2020 at 3:46

Micah's user avatar

MicahMicah

32 bronze badges

5

  • When you get the error, it will highlight a line. Which line? Then look at the function you are using on that line, and find the documentation for it, and look at which arguments are required, and compare it to what you have.

    Jun 24, 2020 at 5:56

  • oField = oEvent.Source.Model . this line .

    Jun 24, 2020 at 6:21

  • and im already correct this line ‘Dim oFeld As Object’ to ‘Dim oField As Object

    Jun 24, 2020 at 6:27

  • Did you look at the documentation for that object? When you use all Object variables like that and provide no information about them in your post, it’s going to be quite difficult for anyone to be able to help you. Start by figuring out what type of object oEvent is…

    Jun 24, 2020 at 9:02

  • This language is LibreOffice Basic, not VBA (Microsoft Office), so please remove the vba tag.

    Jun 24, 2020 at 17:48

1 Answer

Reportstart requires an argument oEvent, and the way you executed it, the subroutine was not given any argument.

The macro was designed to be called from an event handler of a control, for example, the Execute action of a push button on a Base form. Perhaps you executed the subroutine from the LibreOffice Basic IDE instead.

Related: https://ask.libreoffice.org/en/question/192344/argument-is-not-optional/

answered Jun 24, 2020 at 17:53

Jim K's user avatar

Jim KJim K

12.9k2 gold badges22 silver badges51 bronze badges

  • 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 Long

        oErrHandler.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 Function

      ErrHandler:
      oErrHandler.Message «Error», «BadArgmentFunction», Err.Description, Err.Number
      Resume Next

      End 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

Понравилась статья? Поделить с друзьями:
  • Ошибка времени выполнения basic openoffice
  • Ошибка вызова сервиса лицензирования
  • Ошибка вызова сервиса передачи получения данных дублирование данных
  • Ошибка вызова сервиса передачи получения данных null
  • Ошибка вызова сервиса передачи получения данных 0 зарегистрировано