【问题标题】:ByRef Argument Mismatch with VBA in ExcelByRef 参数与 Excel 中的 VBA 不匹配
【发布时间】:2012-06-11 19:44:19
【问题描述】:

我有一个 Let 属性定义为:

Public Property Let Set_ChanArray_Enabled1(i As Integer, j As Integer, choice As Boolean)
    ChanArray(i, j).Enabled1 = choice
End Property

在同一对象模块中定义的子对象中,我尝试执行以下操作:

For j = 4 To 44
    Me.Set_ChanArray_Enabled1(j, 1) = True
    Me.Set_ChanArray_Enabled1(j, 3) = True
Next j 

但是 VBE 给了我一个 ByRef 参数不匹配,指向传入的 j

Me.Set_ChanArray_Enabled1(j, 1) = True

我已经将 j 和传递给方法的参数都定义为整数,所以我不确定哪里出了问题。

【问题讨论】:

  • 您没有传入正确的参数。您编写了函数来接受 3 个参数(i,j,choice),并且使用 (i, j) =choice 调用它。尝试这样称呼它Me.Set_ChanArray_Enabled1(j, 1, True)
  • 我已经尝试过您之前建议的代码,但它不起作用。如果我将 j 替换为普通整数(例如 3),则代码有效。我认为这个错误与传入一个整数变量有关。
  • 好的,我只是研究了一下,你可以按照你写的方式来称呼它。但是,您是否以正确的顺序传递数组索引?您的 Let 属性的顺序为 (i,j),当您调用它时,您正在传递 (j,i)?您是否尝试过将 ByVal 放入您的函数参数中?
  • hm...put byval 似乎让它起作用了!不知道为什么我不早点尝试。谢谢提醒!

标签: excel vba variables methods parameters


【解决方案1】:

该错误表明j 的输入有问题(即它不是整数类型)。

你有没有在类似的声明中声明它; dim j, i as integer?如果是这样,那么只有i 是一个整数(您需要重复as integer)。

(使用byval 似乎可以“解决”这个问题,因为它的传递复制语义允许VBA 在调用Set_ChanArray_Enabled1 之前执行自动类型转换为整数)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多