【问题标题】:how to pass Array as paramenter in VB macro如何在 VBA 宏中将数组作为参数传递
【发布时间】:2015-07-30 06:58:55
【问题描述】:

我正在尝试将数组参数传递给 VB 子过程。如果我使用 '()' 和数组名称,那么它会显示 'Sub or Function not defined' 如果它被删除,那么它会抛出编译器错误“Type mismatch:需要数组或用户定义类型”。

Dim arypred() As Long
Dim dependlink() As Long

Main Sub()

.....
getPred arypred(), dependlink() 'Call to the sub procedure getPred

End Sub

Public Sub getPred(arypred() As Long, dependlink() As Long)

....

End Sub

我用谷歌搜索过,但我无法找到确切的解决方案。另外,我对变体用法和 Array() 感到困惑,因为我看到的大多数示例都是使用 Varaint。

抱歉,如果这个问题非常基本;我是VB新手,正在学习它.. 请帮助完成这项工作..

提前致谢。

【问题讨论】:

    标签: arrays vb.net macros parameter-passing


    【解决方案1】:

    这样做

    Sub Main()
        Dim arypred() As Long = Nothing
        Dim dependlink() As Long = Nothing
    
        getPred(arypred, dependlink)
    End Sub
    
    Public Sub getPred(ByVal arypred() As Long, ByVal dependlink() As Long)
    
    
    End Sub
    

    传递数组时不必包含() 符号,并确保在声明时为数组分配初始值。首先,分配nothing

    建议: 如果要在调用getPred 方法后获取值,请改用Public Function 来返回值。如果该方法仅在类中使用,则使用Private 而不是Public,除非它是一个模块。如果您希望两个变量(arypred 和dependlink)在执行getPred 方法后返回新值,请使用ByRef 而不是ByVal。有关 ByRef 和 ByVal 的更多信息,click herehere.

    【讨论】:

    • 感谢 MAC。我尝试了上述解决方案,但由于“数组参数必须是 ByRef”而引发编译器错误。我尝试用 ByRef 替换 ByVal,但随后在调用行显示语法错误:getPred(arypred,dependlink)
    • 你能包含所有重要的代码吗? @kousalyarajan '因为问题可能出在代码的其他部分。
    • 现在工作正常。问题在于数组变量的可见性。我在一个过程中对它们进行了描述,该过程调用了调用 gePred 的 procedure1。 Public Sub normal2D_Process(shp As Visio.Shape) ......... getPred arypred() ,dependlink() End Sub Public Sub getPred(ByRef arypred() As Long, ByRefdependlink() As Long)
    • @kousalyarajan 我明白了。祝你其余的编码好运! :)
    猜你喜欢
    • 2019-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多