Я делаю простой UDF, который проверяет, является ли данная страна членом ОЭСР. У меня есть два входа:Недопустимое имя, введенное в UDF с VBA для Excel
Excel ячейки, содержащей название страны
ввода, содержащий первую ячейку столбца, содержащего все страны ОЭСР.
Функция сравнивает содержимое ячейки Candidate
и колонны из countries
через петлю. Если имя кандидата не совпадает ни с одной из стран ОЭСР, в конечном итоге эта функция классифицирует ее как страну, не являющуюся членом ОЭСР.
Мой код выглядит так:
Function OECD(Candidate, Countries)
Dim Candidate As String
Dim Countries As String
OECDCountry = Countries 'Variable that changes at every iteration, I compare the name of the candidate to this
For i = 1 To 34
If Candidate.Value = OECDCountry Then
OECD = 2
Else: OECDCountry = Countries.Offset(i, 0)
Next i
'If the column next to the candidate name, where I am running this function, is still empty, record the country as non-OECD
If Candidate.Offset(0, 1) <> 2 Then OECD = 1
End Function
Однако, когда я пытаюсь использовать эту функцию, я получаю следующее сообщение об ошибке при выборе второй вход:
Имя, которое вы ввели не действует. Причины для этого могут включать в себя:
-The имя не начинается с буквы или подчеркивания
-The имя содержит пробел или другие недопустимые символы
-The имя конфликтует с Excel встроенный имя или название другого объекта в рабочей книге
Почему я получаю это сообщение об ошибке и как его исправить?
у вас есть повторяющиеся имена в вашей области. Вы запрашиваете переменные «Кандидат» и «Страны», которые должны быть переданы вашей функции в качестве аргументов, а затем вы объявляете переменные с одинаковыми именами в самой функции. Они не могут быть идентичными именами, что, вероятно, является причиной вашей проблемы. Затем вы также пытаетесь использовать 'Candidate.Value', когда вы пытались преобразовать переменные« Dim Candidate As String »и String, не имеют свойства .Value (хотя переданный аргумент мог бы быть, если он был передан как ссылка на ячейку). – tigeravatar
, вы должны рассмотреть возможность использования второго параметра «Страны как диапазон», сделает ваш код ** UDF ** намного проще –
И вы должны объявить 'OECDCountry'' 'String'. И вам нужно будет объявить ваш UDF как «volatile», так что изменение в столбце, в котором перечислены все страны, позволит вам повторно закрепить UDF. И считаете ли вы, что с помощью 'VLOOKUP' делать все, не используя UDF? – YowE3K