我创建了一个接受数组输入的excel UDF。我希望它只允许数组中的偶数个项目。这是代码:(它只是短暂的,所以我会发布所有内容,这样你就可以有一些上下文)
Function SUBSTITUTEMULTI(inputString As String, ParamArray criteria() As Variant) as String
Dim subWhat As String
Dim forWhat As String
Dim x As Single
If UBound(criteria()) Mod 2 = 0 Then
'check whether an even number of arguments is input
MsgBox "You've entered too few arguments for this function", vbExclamation
Else
x = 0
For Each element In criteria
If x = 0 Then
subWhat = element
Else
forWhat = element
inputString = WorksheetFunction.Substitute(inputString, subWhat, forWhat)
End If
x = 1 - x
Next element
SUBSTITUTEMULTI = inputString
End If
End Function
目前,我返回的消息框看起来像Excel自己的消息框,当您输入SUBSTITUTE()
时缺少第三个参数。但是,当您使用SUBSTITUTE()
或任何类似功能执行此操作时,Excel会阻止您输入公式,而是单击您重新输入它,以便您可以修复故障功能。
我想这样,否则我的函数可以在其破碎状态(奇数个参数)中粘贴到几个单元格中,这意味着重新计算时消息框会出现几次!
如何修复代码,以便在检测到错误的参数(数组中奇数个项目)时,用户会自动返回到编辑公式步骤?
答案 0 :(得分:3)
当输入的参数数量不正确时,让函数返回错误。
返回必须是Variant而不是String。
用SUBSTITUTEMULTI=CVErr(xlErrValue)
替换你的msgbox。
错误列表:
xlErrDiv0
表示#DIV/0
错误xlErrNA
表示#N/A
错误xlErrName
表示#NAME?
错误xlErrNull
表示#NULL
错误xlErrNum
表示#NUM
错误xlErrRef
表示#REF
错误xlErrValue
表示#VALUE
错误答案 1 :(得分:2)