【问题标题】:Using array from another sub使用来自另一个子的数组
【发布时间】:2019-06-13 11:08:59
【问题描述】:

我有一个包含多个数组的子 (initialisation)。然后我正在创建另一个子 (testSub),它必须访问 initialisation 中的一个数组。我不确定如何执行此操作,如果您能提供任何帮助,我将不胜感激。

初始化子:

Sub initialisation()

   init_array = Array("apple", "orange", "car")

   init_array_2 = Array("coconut", "keys", "blue")

End Sub

测试子:

Sub testSub()

For Each element in init_array 'Does not work currently
   [do stuff]
Next

End Sub

【问题讨论】:

  • 您需要将数组传递给第二个子 byRef 或 byValue Sub testSub(init_array as Variant)
  • 您可以将您的数组声明为 Public,以便您可以从项目中的任何位置访问。检查stackoverflow.com/a/51865287/9199828 并阅读Dim vs Private vs Public部分

标签: excel vba


【解决方案1】:

你需要像这样将它作为参数传递:

Option Explicit
Sub initialisation()

    Dim init_array As Variant, init_array_2 As Variant

    init_array = Array("apple", "orange", "car")
    init_array_2 = Array("coconut", "keys", "blue")
    testSub init_array

End Sub
Sub testSub(init_array As Variant)

    Dim element As Variant

    For Each element In init_array 'Does not work currently
       [do stuff]
    Next

End Sub

您还应该使用Option Explicit,它将强制您声明所有变量。

【讨论】:

    【解决方案2】:

    你也可以在 subs 之外定义你的数组:

    Option Explicit
    
    Dim init_array As Variant, init_array_2 As Variant
    
    Sub initialisation()
        init_array = Array("apple", "orange", "car")
        init_array_2 = Array("coconut", "keys", "blue")
    End Sub
    Sub testSub()
    Dim element As Variant
    For Each element In init_array 'Does not work currently
       [do stuff]
    Next
    
    End Sub
    

    【讨论】:

    • 我已经尝试过这个解决方案,同时将 sub 声明为 public,但我仍然无法完成这项工作。我得到与 init_array 为空相同的错误。
    • 因为你需要在testSub之前执行initialisation并在一个Sub中执行,否则会报错
    猜你喜欢
    • 2018-06-07
    • 2023-04-10
    • 2021-04-12
    • 2017-01-28
    • 2020-04-15
    • 2012-04-13
    • 2021-03-27
    • 2018-03-04
    • 2014-07-11
    相关资源
    最近更新 更多