我正在製作一個簡單的UDF,用於檢查給定的國家是否爲OECD的成員。我有兩個輸入:使用VBA for Excel在UDF中輸入的名稱無效
包含國家的名稱
包括含所有的OECD國家中列的第一個單元格中輸入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名稱中包含空格或其他無效字符
使用Excel -The名稱衝突內置下劃線開始名稱或工作簿中另一個對象的名稱
爲什麼我收到此錯誤消息,該如何解決?
你在你的範圍內重名。你要求變量'Candidate'和'Countries'作爲參數傳遞給你的函數,然後你在函數本身中聲明具有相同名字的變量。那些不能是相同的名字,這可能是你的問題的一部分。然後,當您嘗試將Dim Candidate As String並且String變量沒有.Value屬性時(儘管傳遞的參數可能作爲單元格引用傳遞),您也嘗試使用'Candidate.Value'。 – tigeravatar
你應該考慮使用第二個參數'CountriesAs Range',將使你的** UDF **代碼簡單得多 –
你應該聲明'OECDCountry'是一個'String'。你需要將你的UDF聲明爲'Volatile',這樣對列出所有國家的列的更改將允許你的UDF被重新調用。你有沒有考慮過使用'VLOOKUP'來做所有事情而不需要UDF? – YowE3K