【问题标题】:How to use array values as function parameter如何使用数组值作为函数参数
【发布时间】:2020-01-09 22:06:22
【问题描述】:

我想将数组的值传递给接受这些参数的函数。当我根据提供的代码执行此操作时,我收到一条错误消息,告诉我:“ByRef 参数类型不匹配”我知道我的数组被声明为变体,但我传递给它的值来自函数的适当数据类型接受基于 VarType(arrValues(1 - 3)) 那么代码应该怎么改?

这是我稍后将使用的代码的简化版本,其中函数将实际返回一些有用的东西,并将接收更多参数。

Sub CallFunctionWithArray()
    Dim arrValues(1 To 3) As Variant

    arrValues(1) = "One"
    arrValues(2) = 19 - 11 - 2019
    arrValues(3) = 25

    Call ReturnValuesOfArray(arrValues(1), arrValues(2), arrValues(3))

End Sub

Function ReturnValuesOfArray(ValueOne As String, ValueTwo As Date, ValueThree As Integer)
    Debug.Print ValueOne
    Debug.Print ValueTwo
    Debug.Print ValueThree
End Function

在这种情况下,希望代码运行并将传递的数组的值打印到直接窗口。

【问题讨论】:

  • 19 - 11 - 2019 不是日期 - 它是 19 减去 11 减去 2019 - 整数...尝试改为 CVDate("19-11-2019")
  • @braX,使用了您的建议,仍然返回相同的错误:“ByRef 参数类型不匹配”还将 arrValues(2) 更改为字符串,将函数参数更改为字符串,没有任何区别。发生错误时,调用 return... 中的第一个参数高亮显示。

标签: arrays vba ms-access function-parameter


【解决方案1】:

我不确定您想要实现什么,但对于您发布的代码,您需要在函数标题中添加 ByVal 关键字,就像这样

Function ReturnValuesOfArray(ByVal ValueOne As String, ByVal ValueTwo As Date, ByVal ValueThree As Integer)
    Debug.Print ValueOne
    Debug.Print ValueTwo
    Debug.Print ValueThree
End Function

【讨论】:

  • 感谢这解决了我的问题。我曾尝试在标题中设置 ByVal,但仅限于第一个参数。我不知道您需要为每个参数设置 ByVal/ByRef。
  • ByRef 是默认值,因此在您的代码中,参数必须具有与标头中定义的数据类型相同的数据类型,请参阅MSDN
【解决方案2】:

您构建您的数组并将其作为 Variant 传递..
看看这里:

Private Sub Test()
Dim s(2) As String
s(0) = "X"
s(1) = "Y"
s(2) = "Z"
displayArr s

End Sub
Private Sub displayArr(ArrayInput As Variant)
For i = LBound(ArrayInput) To UBound(ArrayInput)
Debug.Print ArrayInput(i)
Next
End Sub

【讨论】:

  • 这个解决方案相当有用。但是,在我的函数声明中,我提到了每个参数的数据类型。根据您的代码,您将使用变体,因为您接受数组作为参数,所以不会检查每个参数的数据类型,对吧?所以这是较少控制进入的数据类型,还是有另一种方法来处理这部分?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-04
  • 2015-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-29
相关资源
最近更新 更多