Несоответствие типа аргумента 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)
Значение в любой ячейке, на которую ссылаются, является либо пустым, либо строкой.
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