如何在Excel UDF中强制参数

时间:2017-02-20 14:20:50

标签: excel vba excel-vba excel-udf

我创建了一个接受数组输入的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会阻止您输入公式,而是单击您重新输入它,以便您可以修复故障功能。 我想这样,否则我的函数可以在其破碎状态(奇数个参数)中粘贴到几个单元格中,这意味着重新计算时消息框会出现几次!

如何修复代码,以便在检测到错误的参数(数组中奇数个项目)时,用户会自动返回到编辑公式步骤?

2 个答案:

答案 0 :(得分:3)

当输入的参数数量不正确时,让函数返回错误。

返回必须是Variant而不是String。

SUBSTITUTEMULTI=CVErr(xlErrValue)替换你的msgbox。

错误列表:

  • xlErrDiv0表示#DIV/0错误
  • xlErrNA表示#N/A错误
  • xlErrName表示#NAME?错误
  • xlErrNull表示#NULL错误
  • xlErrNum表示#NUM错误
  • xlErrRef表示#REF错误
  • xlErrValue表示#VALUE错误

http://www.cpearson.com/excel/writingfunctionsinvba.aspx

答案 1 :(得分:2)

这不是一个特别好的解决方案。通常不建议使用SendKeys,此解决方案仅在您已禁用MoveAfterReturn属性时有效(即在下图中未选中)

enter image description here

Function test(rng As Range)
    'check condition
    If rng.Count <> 2 Then
        MsgBox "Incorrect..."
        SendKeys "{F2}", True
        Exit Function
    End If

    'code here to be run if parameters are valid
    test = "Success"
End Function