【问题标题】:All Public Variables in my entire office suddenly stopped working this morning今天早上我整个办公室的所有公共变量突然停止工作
【发布时间】:2015-11-20 09:20:50
【问题描述】:

事实证明,我是个白痴(或者,至少,对整个软件开发这件事毫无经验)。以下是我一整天都在恐慌的事情。我会写一个答案,详细说明我所看到的、随后采取的行动以及实际发生的情况。

tl;dr:认为我的 IDE 是如何工作的和它实际上是如何工作的是两件不同的事情。实际上,我的代码中有一个错误,但由于我如何解释我认为我的 IDE 告诉我的内容,我认为问题要大得多。我是个白痴,还没有实现版本控制。

我之前写的:

问题比我想象的要大。截至目前,我办公室的每台计算机(到目前为止我已经检查过 [4])上的每一段 VBA 代码(包括数天/数周/数月未触及的代码)都表现出这种行为。

在一个模块中声明的公共变量public variable as type 没有出现在其他模块中。具体来说,本地窗口显示<No Variables>。据我所知,这发生在格林威治标准时间昨天(2015 年 8 月 25 日)晚上 9 点和今天上午 11 点(格林威治标准时间 2015 年 8 月 26 日)之间的某个时间。

这导致我在过去一年中编写的大多数宏都无法运行。请帮忙!

【问题讨论】:

  • 尝试使用 AppsPro 的代码清理器:appspro.com/Utilities/CodeCleaner.htm
  • 我已经确定无论这是什么,它都在办公室范围的应用程序级别,而不是我的代码。

标签: vba excel scope global-variables public


【解决方案1】:

发生了什么:我今天早上打开了一个宏来扩展它。我运行它以检查它是否仍在工作。它引发了“自动化错误”。

[旁注](我一直习惯于在我的本地窗口中看到我的全局变量。在模块名称下的一个不错的下拉选项卡中。事实证明,只有当你公开声明它们时才会发生这种情况在您正在查看的模块中。我不知道这一点,我的新宏将我所有的公共变​​量都放在自己的单独模块中)[return]

所以,我调试了我的代码,查看了为什么这个工作表对象会抛出错误,并在我的本地窗口中看到:<No Variables>,我的公共变量总是在那里。自然,我惊慌失措。我认为程序必须停止引用其他模块中的公共变量。我检查了我办公室里的所有其他电脑,同样的事情。我疯狂地搜索互联网。这没什么。无奈之下,我求助于 Stack Overflow、Server Fault 和 Super User 以及 Code Review 的聊天室。没有运气。

然后我真的很恐慌。我心甘情愿地致电 Microsoft 技术支持。

不用说,这太糟糕了,我放弃了。走了一会儿,用我的武士刀在我们大楼的空地板上消除了我的挫败感(LARP 安全,因此对大楼没有实际损坏)。

然后我回来,回去聊天,和更多的人交谈,尝试了更多的东西,最后发现了关于 locals 窗口的事情,这让我找到了我的代码的实际问题:

我的宏在我试图引用其工作表的代码点之前关闭了一个工作簿。就是这样。

总而言之,我浪费了整个工作日试图解决一个不存在的问题。

所以,这里列出了我可以做/应该做的事情,这些事情可以防止这种情况发生:

版本控制:具体来说,能够将代码恢复到已知可以工作的前一个时间点。这将立即证明我的代码来自例如前一天仍然按预期运行。

监视窗口: 在 VBA IDE 中,这允许您指定变量并在整个宏中跟踪它们的状态。这将表明我的变量仍然存在,它仍然被引用,它只是突然在代码中的某个点被清空。

实际运行旧的宏:因为我认为本地窗口也显示公共变量,但它们不存在。我在其他计算机上所做的只是进入一个宏,看看它们不在那里,并假设最坏的情况。如果我实际上只是在一天前运行了我的任何宏,就可以避免这个问题。

TDD / 单元测试: 几乎在我介绍它的那一刻就发现了我的错误,而且肯定在写它的几分钟内就发现了我的错误,这将提供一个关于出错和阻止的重要提示这整件事还没开始。

不惊慌:我忘记/没有尝试很多非常明显的事情,其中​​任何一件都会证明我的理论是错误的。相反,因为我认为自己有问题,所以我只寻找可以证实它的证据,而不是寻找可以反驳它的证据。

从好的方面来说,至少我现在比今天早上聪明得多。

【讨论】:

    猜你喜欢
    • 2014-02-22
    • 2022-06-23
    • 1970-01-01
    • 2013-10-11
    • 1970-01-01
    • 2016-05-18
    • 1970-01-01
    • 2016-02-11
    • 2012-07-15
    相关资源
    最近更新 更多