如何在 Excel UDF 中强制使用参数
How to force an argument in an Excel UDF
我创建了一个接受数组输入的 excel UDF。我希望它只允许数组中的项目数量为偶数。这是代码:(它很短所以我会 post 全部这样你就可以有一些上下文)
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
目前我 return 一个看起来像 Excel 自己的消息框,当您输入 SUBSTITUTE()
并且缺少第三个参数时会出现该消息框。但是,当您使用 SUBSTITUTE()
或任何类似函数执行此操作时,Excel 会阻止您输入公式,而是单击您返回公式,以便您可以修复错误的函数。
我想要这样,否则我的函数可以在其损坏状态(奇数个参数)中粘贴到多个单元格中,这意味着消息框在重新计算时出现多次!
如何修复代码,以便在检测到不正确的参数(数组中的项目数为奇数)时,用户会自动return进入编辑公式步骤?
这不是一个特别好的解决方案。通常不鼓励使用 SendKeys
,此解决方案仅在您禁用 MoveAfterReturn
属性 时有效(即在下图中未选中)
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
当输入的参数数量不正确时,函数 return 出错。
return 必须是 Variant 而不是 String。
用 SUBSTITUTEMULTI=CVErr(xlErrValue)
替换你的 msgbox。
错误列表:
xlErrDiv0
#DIV/0
错误
xlErrNA
#N/A
错误
xlErrName
#NAME?
错误
xlErrNull
#NULL
错误
xlErrNum
#NUM
错误
xlErrRef
#REF
错误
xlErrValue
#VALUE
错误
我创建了一个接受数组输入的 excel UDF。我希望它只允许数组中的项目数量为偶数。这是代码:(它很短所以我会 post 全部这样你就可以有一些上下文)
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
目前我 return 一个看起来像 Excel 自己的消息框,当您输入 SUBSTITUTE()
并且缺少第三个参数时会出现该消息框。但是,当您使用 SUBSTITUTE()
或任何类似函数执行此操作时,Excel 会阻止您输入公式,而是单击您返回公式,以便您可以修复错误的函数。
我想要这样,否则我的函数可以在其损坏状态(奇数个参数)中粘贴到多个单元格中,这意味着消息框在重新计算时出现多次!
如何修复代码,以便在检测到不正确的参数(数组中的项目数为奇数)时,用户会自动return进入编辑公式步骤?
这不是一个特别好的解决方案。通常不鼓励使用 SendKeys
,此解决方案仅在您禁用 MoveAfterReturn
属性 时有效(即在下图中未选中)
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
当输入的参数数量不正确时,函数 return 出错。
return 必须是 Variant 而不是 String。
用 SUBSTITUTEMULTI=CVErr(xlErrValue)
替换你的 msgbox。
错误列表:
xlErrDiv0
#DIV/0
错误xlErrNA
#N/A
错误xlErrName
#NAME?
错误xlErrNull
#NULL
错误xlErrNum
#NUM
错误xlErrRef
#REF
错误xlErrValue
#VALUE
错误