【问题标题】:Variant array passed from UserForm to Module in VBA is null/emptyVBA 中从 UserForm 传递到 Module 的变体数组为空/空
【发布时间】:2016-05-28 00:50:32
【问题描述】:

我有一个带有 ListBox 的用户窗体供用户选择值。这些值通过对基本模块的函数调用填充到UserForm_Initialize() 中,该基本模块返回一个数组作为变量。这没有问题。

如果用户选择了一些值并按下了按钮,按钮的 Click 事件会调用基本模块中的另一个函数来传递用户输入的数组并进行计算。这根本不起作用。在基本模块中接收到的值总是不存在的(甚至不为 null,但我不知道正确的 VBA 术语,什么都没有)。


到目前为止我尝试过的事情:

  • 通过 ByVal 传递所有参数:没有影响
  • 使用全局共享变量:这确实有效,但如果我所做的只是将单个数组传递给单个函数,我不想依赖它们。这也将状态引入必须管理的代码中,尤其是在重用函数时
  • 通过完全限定符访问函数:没有任何区别。函数已正确找到并执行,但参数变量为空,因此函数稍后在进行计算时会失败。

我的问题是:如何在不依赖全局变量和不丢失数组内容的情况下将数组从用户窗体传递到模块(反之亦然)?

这个问题可能与this question about passing a String from Form to Module 有关,但接受的答案对我来说没有帮助(使用全局变量)。

【问题讨论】:

  • 基本模块的代码在哪里?
  • 请向我们展示相关的代码。
  • 您可以在这里看到我的答案(将参数数组从用户窗体传递到具有 2 个方法(函数或子)的模块stackoverflow.com/questions/35211641/…

标签: arrays vba excel excel-2010


【解决方案1】:

当按照 cmets 的要求添加代码时,我偶然发现我可以打印数组的内容,但它不会在调试器中显示任何内容,并且大小将为 0。

大小问题是因为我使用了Len(array) 而不是Application.CountA(array),并且代码中还有一个早期的On error resume next,这意味着没有引发错误并且大小始终设置为零...这就是奇怪行为的原因。

【讨论】:

  • len(join(array)) 我认为会起作用。如果数组不是 0 大小,ubound(array) 也可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 2020-12-28
  • 2017-05-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多