在跟踪更改时使用VBA获得编译错误

我得到一个编译错误“byRef参数types不匹配”。 是否有什么促使这个或如何我可以清除它? 我检查了其他的子function和vOldArr是所有的范围。 该错误出现在Worksheet_Change子项中

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 

通过ByRef传递的参数必须具有过程中预期的精确数据types。

例如,如果在预期Integer时尝试传递一个Longvariables,则会发生此错误。

 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) 

Get_Dirction期待2变种和1范围

预期vOldArr作为一个Range但gettng一个Variant ,因此错误。

在这里输入图像说明

声明vOldArr作为RangePrivate Sub Worksheet_Change(ByVal target As Range)

要么

vOldArr声明为Sub Get_Dirction(vOldVal As Variant, target As Variant, vOldArr As Range) Variant Sub Get_Dirction(vOldVal As Variant, target As Variant, vOldArr As Range)