3

好的,第二次尝试编写堆栈溢出问题,如果这看起来很熟悉,请原谅我。

我正在重写一个在 2 1/2 年期间构建的 Excel 宏,科学人风格(添加到零碎)。我需要做的一件事是将数据加载到数组中一次且仅一次,以确保数据的准确性和速度。对于我的技能水平,我将坚持使用 Array 方法。

我的两种方法是:

  • 使用全局变暗动态数组
  • 在我的 Main 过程中调暗动态数组并将它们传递给被调用的过程

那么,Stack Overflow 对这两种方法的优缺点有何看法?谢谢,克雷格...

4

2 回答 2

9

首先,回答您没有明确提出的问题:设置一个自定义类并在其中加载数据。说真的,你以后会感谢我的。

好的,关于你的问题。我首先尽可能地限制范围。这意味着我在过程之间传递变量。当您的所有变量都具有尽可能严格的范围时,您会遇到最少的问题。

一旦一个变量通过了两层深度(调用过程到第一层,第一层到第二层),然后我开始对我的结构进行批判性的审视。通常(但不总是)如果所有三个过程都在同一个模块中,我将创建一个模块级变量(使用 Private 关键字而不是 Dim)。如果你正确地(不是随意地)分离你的模块,你就可以在没有太大风险的情况下拥有模块级变量。

有一些变量从一开始就始终是全局变量:保存应用程序名称和应用程序版本的变量;只要应用程序正在运行,就永远不会失去作用域的顶级类模块;包含命令栏名称之类的常量(我知道它们不是变量)。我知道我想要这些全球性的,所以他们以这种方式开始。

我要冒昧地说模块级变量永远不会迁移到全局变量。全局变量因其性质而以这种方式开始。如果使用模块级变量看起来很麻烦,那可能是因为我无缘无故地拆分了一个模块,或者我需要重新考虑我的整个框架。

这并不是说我从来没有在我不应该作弊的时候作弊并使用过全局。我们都这样做了,如果你也这样做,你不应该失眠。

所以要正确地结束这篇文章:除非我被迫,否则我会退出使用数组。我使用自定义类,因为

ActiveCell.Value = Invoice.LocalSalesTaxAmount

比调试好得多

ActiveCell.Value = aInvoice(35,2)

以防万一你认为你需要更多的技能来使用自定义类——我也是。我咬紧牙关,其他人也可以。

于 2010-02-03T02:11:36.230 回答
2

您需要小心 Excel VBA 中的全局变量,因为如果您的应用程序遇到任何类型的错误,并且进行了某种软重置(但应用程序仍然有效),那么全局变量将被删除。

我不得不放弃全局变量,因为我没有写出完美的应用程序。

于 2010-02-02T23:59:25.080 回答