Меню

Ошибка неверное количество аргументов

Im writing an excel sheet for work that when I press a button a loop runs through some rows and will edit some data if they’re empty but I cant seem to get the macro to run as it keeps returning the 450 error.
heres a simplified version of the code that wont run.(starts at option explicit ends at end sub formatting is acting up when I paste in)

Option Explicit

Sub Copypaste()
'
' Copypaste Macro
'
' Keyboard Shortcut: Ctrl+p
'
    Dim i As Integer, j As Integer
    Dim ls As Boolean

    i = 2
    j = 24
    ls = True

    Do While ls = True

        If IsEmpty(i, j) = True Then
            Cells(i, j).Value = 10
            ls = False
        Else
            ls = True
        End If

        i = i + 1
        j = j + 1

        If i > 10 Then
            ls = False
        End If
    Loop
End Sub

Ive searched loads of threads and I cant seem to find anyone with the same issue as mine as any fixes ive made don’t seem to be the problem.

New to macro as in discovered it today so could be a case of multiple errors

Community's user avatar

asked Feb 29, 2016 at 17:27

Naish O'Loughlin's user avatar

0

You need to change

If IsEmpty(i, j) = True Then

to

If IsEmpty(Cells(i, j).Value2) = True Then

answered Feb 29, 2016 at 17:33

Ralph's user avatar

4

Im writing an excel sheet for work that when I press a button a loop runs through some rows and will edit some data if they’re empty but I cant seem to get the macro to run as it keeps returning the 450 error.
heres a simplified version of the code that wont run.(starts at option explicit ends at end sub formatting is acting up when I paste in)

Option Explicit

Sub Copypaste()
'
' Copypaste Macro
'
' Keyboard Shortcut: Ctrl+p
'
    Dim i As Integer, j As Integer
    Dim ls As Boolean

    i = 2
    j = 24
    ls = True

    Do While ls = True

        If IsEmpty(i, j) = True Then
            Cells(i, j).Value = 10
            ls = False
        Else
            ls = True
        End If

        i = i + 1
        j = j + 1

        If i > 10 Then
            ls = False
        End If
    Loop
End Sub

Ive searched loads of threads and I cant seem to find anyone with the same issue as mine as any fixes ive made don’t seem to be the problem.

New to macro as in discovered it today so could be a case of multiple errors

Community's user avatar

asked Feb 29, 2016 at 17:27

Naish O'Loughlin's user avatar

0

You need to change

If IsEmpty(i, j) = True Then

to

If IsEmpty(Cells(i, j).Value2) = True Then

answered Feb 29, 2016 at 17:33

Ralph's user avatar

4

I’m trying to create a logic as the title but «Wrong number of arguments to IF. Expected between 2 and 3 arguments, but got 1 arguments» what am i doing wrong?

formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0)),"COMPLETE","PENDING"))

JDOaktown's user avatar

JDOaktown

4,0847 gold badges38 silver badges50 bronze badges

asked Oct 7, 2021 at 10:10

Fuzz Ryi's user avatar

Mismatch of brackets () , try below formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0))),"COMPLETE","PENDING")

answered Oct 7, 2021 at 10:21

Rocky's user avatar

RockyRocky

9051 gold badge7 silver badges12 bronze badges

1

try:

=IF((U28=1)+(ISNUMBER(MATCH("TERMINATE", P28, ))), "COMPLETE", "PENDING")

answered Oct 7, 2021 at 21:35

player0's user avatar

player0player0

121k9 gold badges60 silver badges113 bronze badges

1

I’m trying to create a logic as the title but «Wrong number of arguments to IF. Expected between 2 and 3 arguments, but got 1 arguments» what am i doing wrong?

formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0)),"COMPLETE","PENDING"))

JDOaktown's user avatar

JDOaktown

4,0847 gold badges38 silver badges50 bronze badges

asked Oct 7, 2021 at 10:10

Fuzz Ryi's user avatar

Mismatch of brackets () , try below formula:

=IF(OR(U28=1,isnumber(MATCH("TERMINATE",P28,0))),"COMPLETE","PENDING")

answered Oct 7, 2021 at 10:21

Rocky's user avatar

RockyRocky

9051 gold badge7 silver badges12 bronze badges

1

try:

=IF((U28=1)+(ISNUMBER(MATCH("TERMINATE", P28, ))), "COMPLETE", "PENDING")

answered Oct 7, 2021 at 21:35

player0's user avatar

player0player0

121k9 gold badges60 silver badges113 bronze badges

1

Чтобы немного расширить то, что говорят ориен и биаобиаоци. . .

Возможно, вас смущает то, что Method.invoke(Object, Object...) обычно может просто принимать аргументы «встроенными», так сказать; когда компилятор видит что-то вроде someMethod.invoke(someObject, arg1, arg2), он неявно создает массив new Object[]{arg1, arg2} а затем передает этот массив в Method.invoke. Method.invoke затем передает элементы этого массива в качестве аргументов вызываемому методу. Все идет нормально.

Но когда компилятор видит что-то вроде someMethod.invoke(someObject, someArray), предполагается, что вы уже упаковали аргументы в массив; так что он больше не будет их переупаковывать. Итак, тогда Method.invoke постараюсь пройти элементы of someArray в качестве аргументов вызываемого вами метода, вместо того, чтобы передавать someArray сам в качестве аргумента.

(Это всегда так ... обозначения произведений; он принимает или массив, содержащий элементы соответствующего типа, or ноль или более аргументов соответствующего типа.)

Итак, как сказали Ориен и Биаобиаоци, вам нужно перемотать parameters в дополнительный массив, new Object[] {parameters}, Так что parameters сам в конечном итоге передается в ваш метод.

Имеет ли это смысл?

Может быть, я ставлю круглые скобки неправильно или неверная запятая? Я знаю, что это довольно начинающий вопрос, поэтому заранее прошу прощения. У меня изначально был этот код:

es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1)

Но es3 был Left Outer Join, поэтому все пробелы показывали ‘,’, поэтому я попробовал это ниже и получаю ОШИБКУ

ORA-00909: неверное количество аргументов

NVL(es3.last_name, ' ' , es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1))

Спасибо!

3 ответа

Лучший ответ

Из документации:

Синтаксис для функции NVL в Oracle / PLSQL:

NVL( string1, replace_with )

Вы указываете 3 аргумента, отсюда и сообщение об ошибке. Я верю, что вы хотите это вместо этого:

CASE WHEN es3.last_name IS NULL
     THEN ''
     ELSE es3.last_name || ', ' ||SUBSTR(es3.first_name,1,1)
END


3

Community
20 Июн 2020 в 09:12

У вас должно быть только два аргумента для

функция nvl

Как в NVL(es3.last_name,'Özhan') возвращает Özhan, если es3.last_name равен нулю.

Проблема заключается в наличии более двух аргументов.

В вопросе проблемная часть .. ' ' , .. в

NVL (es3.last_name, ' ' , es3.last_name || ‘,’ || SUBSTR ( es3.first_name , 1,1 ) )


1

Barbaros Özhan
19 Окт 2017 в 20:06

NVL может иметь только два аргумента

NVL(String, Value )

Таким образом, вышеприведенная функция будет возвращать «Значение», когда строка равна нулю. И «String» само по себе, когда строка не нулевая.

Используйте NVL2. NVL2 может иметь три аргумента

NVL2(String, Value_when_not_null, Value_When_Null)

Поэтому, когда String не равен NULL, он возвращает второй параметр. Когда String равен нулю, возвращается третий параметр.

Так что ваша функция должна быть

NVL2(es3.last_name||es3.first_name , es3.last_name||','||es3.first_name, ' ')


1

Valli
19 Окт 2017 в 20:03

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Ошибка неверный синтаксис для типа bigint
  • Ошибка неверное имя стиля word