처음에는 내 주 코드 섹션에서 추한 if 문을 사용했습니다. 나는 이것을 호출 할 함수로 만들기로 결정하여, "컴파일 오류 : ByRef 인수 유형 불일치"오류가 발생했습니다. 필자의 가정은 함수를 제대로 참조해야한다는 것입니다. 그러나 필자는 설명서를 읽었으므로 그 이유를 알 수 없습니다. Dim ShiftValue As String
VBA ByRef 인수 유형 불일치
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
업데이트 :
내 함수 호출이 너무 같은 경우에는 섹션의 그렇지 않은 부분에 있습니다
<ShiftValue 변수를 선언
If X
"'Do stuff..."
Else
Call ShiftCompare(ShiftValue)
EndIf
오류는 기능 선에서 발생할 :
Function ShiftCompare(ByVal ShiftValue As String)
참조되는 어떤 셀의 값이 비어 또는 문자열 중 하나입니다.
'ByRef'가 필요합니까? 그것은 당신이 그것을 호출 함수에 무엇이든 반환하기 위해 사용하고있는 것처럼 보이지 않으므로'ByVal'을 대신 사용해보십시오. – braX
ByVal은 아무 것도 변경하지 않았으며 지정하지 않고 자체적으로 변수를 전달하지도 않습니다. Alex Alex : –
Function을 Sub로 변경하면 효과가있을 수 있습니다. 또는 인수를 괄호 안에 문자열로 전달하십시오. 다음과 같이 :'Call ShiftCompare ("ShiftValue")' – Vityata