gpt4 book ai didi

excel - ByRef 参数类型不匹配 Excel VBA

转载 作者:行者123 更新时间:2023-12-04 21:20:41 24 4
gpt4 key购买 nike

我正在使用 Windows 7、Excel 2010、VBA。我收到一个错误
“ByRef 参数类型不匹配”。我假设这是我的变量类型的问题。我发现了很多像我这样的问题,但我找不到任何可以帮助我找出问题的东西。

变量声明

'Force explicit variable declaration
Option Explicit
Private dptData(8) As String
Private TSdata(8) As String
Private fiscalYear(8) As String

调用函数
parseUserData fiscalYear, dptData, TSdata

调用函数原型(prototype)
Function parseUserData(fiscalYear As String, dptDataAs String, TSdata As String)

最佳答案

您将数组传递给 String .更改函数的签名以接受 Variant反而。

Public Function parseUserData(fiscalYear As Variant, dptDataAs Variant, TSdata As Variant)
Debug.Assert IsArray(fiscalYear) And IsArray(dptDataAs) And IsArray(TSdata)

一个 String参数只能接受 String论据1。 Variant另一方面,可以接受任何东西——包括一个数组——但是你会想要 Assert您正在处理一个数组,因此如果不是这种情况,您可以停止执行(并防止错误)。

为什么在类型化数组上使用 Variant?

可以使用类型化数组,但不能从 Variant 强制转换类型化数组。参数 - 这意味着:
Public Sub DoSomething(ByRef args() As String)

...不能用这个完全有效的字符串数组调用:
DoSomething Array("string1", "string2", "string3") ' can't pass a variant array!

将签名更改为 DoSomething(ByRef args As Variant)让它工作。您需要做的就是为您的变体数组参数使用一个有意义的、描述性的、复数形式的名称,以便在调用该过程时显示 IntelliSense 时,该名称会告诉您您需要知道的一切。

但是...“变体”是邪恶的!

与许多其他语言没有什么不同,VBA 中的类型安全本质上是雾里看花。 Variant是一个非常强大的工具并且确实有它的用途——当你可以避免它并不意味着忘记它的存在。使用它在过程之间传递数组引用不会损害代码的可读性、可维护性或稳定性。 Variant启用鸭子类型和后期绑定(bind),并且是合法的 COM 类型。

这是一把锤子。只要确保不是所有东西都变成钉子,你就会做得很好。

1VBA 会将其他值类型隐式转换为 String ,但不能隐式或显式地将数组强制转换为字符串。

关于excel - ByRef 参数类型不匹配 Excel VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51389109/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com