在跟踪更改时使用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
时尝试传递一个Long
variables,则会发生此错误。
例
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
作为Range
在Private 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)