2017-11-30 20 views
1

コンパイルエラー "byRef argument type mismatch。"が表示されるこれを促しているか、それをどうやって消し去ることができるのかを確かめてください。私は他のサブfuctionsを確認し、vOldArrはそれらのすべての範囲です。エラーがByRefを渡された引数が手続きに予想される正確なデータ型を持っている必要があります変更を追跡中にVBAでコンパイルエラーが発生する

Dim vOldVal 
    Dim vOldArr 
Private Sub Worksheet_SelectionChange(ByVal target As Range) 
    vOldVal = target.Value 
    Set vOldArr = target 
End Sub 

Private Sub Worksheet_Change(ByVal target As Range) 

    Call Get_Dirction(vOldVal, target, vOldArr) 

End Sub 

Sub Get_Dirction(vOldVal As Variant, target As Variant, vOldArr As Range) 
    If target.Count = 1 Then 
     Call Check_Change_Single(vOldVal, target) 
     Exit Sub 
    Else 
     Call Check_Change_Mult(vOldArr, target) 
    End If 
End Sub 
+0

方法Sub Get_Dirction(vOldVal As Variant, target As Variant, vOldArr As Range)VariantようvOldArrを宣言Private Sub Worksheet_Change(ByVal target As Range)

OR

RangeたようvOldArrを宣言あなたのGet_dirctionは書かれていますか?その署名は何ですか? (Sub Get_dirction(........)と書かれている最初の行)そして、もしvOldArrが範囲であれば、その部分ではなく、その部分として宣言してください。 – QHarr

+0

'Sub Get_Dirction(vOldVal As Variantバリアント、vOldArrとして範囲として、ターゲット) target.Count = 1次に コールCheck_Change_Single(vOldVal、ターゲット) 出口サブ エルス コールCheck_Change_Mult(vOldArr、ターゲット) END IF エンドSub' – mpmcderm

+0

vOldArrは次のように宣言されている場合明示的にAs Rangeに変更し、コードの先頭にOption Explicitも使用します。 – QHarr

答えて

0

Worksheet_Changeサブに入っています。

たとえば、Integerが予想されるときにLong変数を渡そうとすると、このエラーが発生します。

Sub Sample() 
    Dim SampleValue As Long 

    SampleValue = 1 

    SomeProcedure SampleValue 
End Sub 


Sub SomeProcedure(l As Integer) 
    ' 
    '~~> Some Code 
    ' 
End Sub 

あなたがコードを実行すると、あなたが

Sub Get_Dirction(vOldVal As Variant, target As Variant, vOldArr As Range) 

を持っているあなたはあなたのケースでは

enter image description here

を取得しているエラーが表示されます。はの2つの変種と1つの範囲を期待しています。

vOldArrRangeと期待されていますが、Variantとなり、エラーが発生します。

enter image description here

ソリューション

関連する問題