VBA ByRef参数类型不匹配

VBA ByRef参数类型不匹配,vba,excel,mismatch,byref,Vba,Excel,Mismatch,Byref,最初在我的主代码部分,我有一个丑陋的if语句——尽管它会运行得很丑陋。我决定让它成为我要调用的函数,这导致我得到一个错误“编译错误:ByRef参数类型不匹配”。我的假设是需要正确引用该函数,尽管我一直在阅读文档,不明白为什么>

最初在我的主代码部分,我有一个丑陋的if语句——尽管它会运行得很丑陋。我决定让它成为我要调用的函数,这导致我得到一个错误“编译错误:ByRef参数类型不匹配”。我的假设是需要正确引用该函数,尽管我一直在阅读文档,不明白为什么><

声明ShiftValue变量:

Dim ShiftValue作为字符串
移位值=LCase(表(“原始”)单元格(计数器,“C”).值)

功能内容及声明:

Function ShiftCompare(ByRef ShiftValue As String)

If StrComp(ShiftValue, "am", vbTextCompare) = 0 Then
        Call IncAMs(AMs)   'this function increments the variable by 1.
        Call Inc(Counter)

    ElseIf StrComp(ShiftValue, "pm", vbTextCompare) = 0 Then
        Call IncPMs(PMs)
        Call Inc(Counter)

    ElseIf StrComp(ShiftValue, "days", vbTextCompare) = 0 Then
        Call IncDays(Days)
        Call Inc(Counter)

    ElseIf StrComp(ShiftValue, "leave", vbTextCompare) = 0 Then
        Call IncLeave(Leave)
        Call Inc(Counter)

    Else 'If the string doesn't compare to the above values tally it as unknown
        Call IncUnknown(Unknown)
        Call Inc(Counter)
    End If
End Function
更新:

我的函数调用位于If部分的Else部分,如下所示:

If X
"'Do stuff..."

Else 

Call ShiftCompare(ShiftValue)

EndIf
在功能行上出现错误:

函数移位比较(ByVal ShiftValue作为字符串)


引用的任何单元格中的值都是空的或字符串

调用函数时参数的值不是字符串。检查
ShiftValue
的值,然后重试。如果要确保它是一个字符串,请像这样传递它
调用ShiftCompare(“MyStringValue”)


函数的思想是返回一个值是好的。
你的不回来了。更改<代码>函数<代码> >代码>子< /代码> ./p> 除VITYATA的上述答案外,考虑一个SELECT语句以避免所有这些代码> ELSIF < /COD>语句。它跑得更快

Option Compare Text
Public Sub ShiftCompare(ByVal ShiftValue As String)
    Select Case True
        Case StrComp(ShiftValue, "am") = 0:
            Call IncAMs(AMs)   'this function increments the variable by 1.
            Call Inc(Counter)

        Case StrComp(ShiftValue, "pm") = 0:
            Call IncPMs(PMs)
            Call Inc(Counter)

        Case StrComp(ShiftValue, "days") = 0:
            Call IncDays(Days)
            Call Inc(Counter)

        Case StrComp(ShiftValue, "leave") = 0:
            Call IncLeave(Leave)
            Call Inc(Counter)

        Case Else:  'If the string doesn't compare to the above values tally it as unknown
            Call IncUnknown(Unknown)
            Call Inc(Counter)
    End Select
End Sub

您是否需要将其设置为ByRef?看起来您并不是在使用它向调用函数返回任何内容,因此请尝试改用
ByVal
。ByVal没有更改任何内容,也没有在不指定的情况下单独传递变量。更新了帖子以回答这些问题Alex:)将函数更改为Sub,它可能会工作。或者将参数作为字符串传递到括号中。像这样:
callshiftcompare(“ShiftValue”)
Negative不幸的是,我自己会继续阅读文档-感谢大家迄今为止的帮助@JohnHiggs-你能在调用函数之前在行中写入
debug.print ShiftValue
吗?就是这个-调用时值为空。我最初的for循环拾取null或空变量值,并在最后一个if语句中处理它们,而调用函数时,值不能为null/empty。将在调用该sub之前验证该值是否为null/空。感谢您的帮助@JohnHiggs-仅供参考-null和empty在VBA中是不同的术语。注意你要检查的是哪一个。