Несоответствие типа аргумента VBA ByRef



Первоначально в моем основном разделе кода у меня был уродливый оператор if - хотя уродливый он будет работать. Я решил сделать его функцией, которую я буду вызывать, это вызвало у меня ошибку "Compile error: byref argument type mismatch". Я предполагаю, что на функцию нужно ссылаться правильно, хотя я читал документацию и не могу понять, почему >.


Объявление переменной ShiftValue:

Dim ShiftValue As String

ShiftValue = LCase(Sheets("Raw_Rota").Cells(Counter, "C").Value)



Содержание функции и декларация:



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, например:



If X
"'Do stuff..."

Else

Call ShiftCompare(ShiftValue)

EndIf


Ошибка возникает в строке функции:



Function ShiftCompare(ByVal ShiftValue As String)



Значение в любой ячейке, на которую ссылаются, является либо пустым, либо строкой.

579   2  

2 ответов:

Значение параметра при вызове функции не является строкой. Проверьте значение ShiftValue и повторите попытку. Если вы хотите убедиться, что это строка, передайте ее следующим образом Call ShiftCompare("MyStringValue")


Идея функции заключается в том, что хорошо, что она возвращает значение. Твой не возвращается. Измените Function на Sub.

В дополнение к ответу Витяты, приведенному выше, рассмотрим утверждение Select, чтобы избежать всех этих утверждений ElseIf. Он бежит быстрее.

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

Comments

    Ничего не найдено.