最初は私のメインコードセクションでは、醜い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
更新:
私の関数呼び出しが他にそうようなIF部の一部である:
ShiftValue変数を宣言<
If X
"'Do stuff..."
Else
Call ShiftCompare(ShiftValue)
EndIf
エラーは、関数行に上昇する:
Function ShiftCompare(ByVal ShiftValue As String)
参照されるどのようなセルの値が空または文字列のいずれかです。
「ByRef」にする必要がありますか?あなたが呼び出し関数に何かを返すためにそれを使用しているように見えないので、代わりに 'ByVal'を使ってみてください。 – braX
ByValは何も変更しませんでした - どちらも指定せずに単独で変数を渡すだけではありません。それらの質問に答えるためにポストを更新しましたAlex :) –
機能をSubに変更すると機能することがあります。または、引数をかっこ内の文字列として渡します。このように: 'Call ShiftCompare(" ShiftValue ")' – Vityata