事实证明,我是一个白痴(或者,至少对这整个软件开发事情毫无希望的经验)。以下就是我整天都在恐慌的事情。我会写一个回答,详细说明我看到的内容,所采取的行动以及实际发生的事情。
tl; dr:我思考我的IDE是如何工作的以及实际的工作原理是两个不同的东西。实际上我的代码中有一个错误,但由于我如何解释我认为我的IDE告诉我的内容,我认为问题是一个更大的问题。我还是一个尚未实现版本控制的白痴。
我之前写的内容:
问题比我想象的要大。截至目前,我办公室的每台计算机上的每一块VBA代码(包括未触及数天/数周/月的代码)(我迄今已查看过[4])都表现出这种行为。
模块中声明的公共变量public variable as type
未出现在其他模块中。具体来说,本地窗口显示<No Variables>
。据我所知,这可能发生在格林威治标准时间昨天晚上9点(2015年8月25日)和格林威治标准时间早上11点(2015年8月26日)之间。
这使得我在过去一年中编写的大多数宏都无法运行。请帮忙!
答案 0 :(得分:2)
发生了什么:我今天早上打开了一个宏来努力扩展它。我跑去检查它是否还在工作。它引发了一个&#34;自动化错误&#34;。
[旁注](我一直习惯于能够在我的本地窗口中看到我的全局变量。在模块名称下的一个很好的下拉选项卡中。事实证明,这只会在您公开时发生在你正在查看的模块中声明它们。我不知道这个,我的新宏在我们自己的单独模块中有我所有的公共变量)[返回]
所以,我调试了我的代码,看看为什么这个工作表对象抛出错误,并在我的本地窗口中看到:<No Variables>
,我的公共变量总是在那里。当然,我惊慌失措。我认为该程序必须停止引用其他模块中的公共变量。我检查了办公室里的所有其他电脑,同样的事情。我疯狂地搜索了互联网。没什么。在解压缩中,我转向Stack Overflow和Server Fault以及Super User和Code Review的聊天室。没运气。
然后我真的很恐慌。我心甘情愿地打电话给微软技术支持。
毋庸置疑,这种情况非常严重,我放弃了。走了一会儿,用我的武士刀在我们建筑物的空地板上沮丧(LARP安全,所以没有对建筑造成实际损坏)。
然后我回来了,回去聊天,和更多的人交谈,尝试了更多的东西,最后找到了关于本地窗口的东西,这让我找到了我的代码的实际问题:
我的宏在我尝试引用其工作表的代码中的一个点之前关闭了一个工作簿。就是这样。
总之,我浪费了整整一个工作日来试图修复一个不存在的问题。
所以,这里列出了我本可以做/应该做的事情,这会阻止这一点:
版本控制:具体而言,能够将代码恢复到已知工作的先前时间点。这会立即证明我的代码来自于前一天仍按预期跑了。
监视窗口:在VBA IDE中,您可以指定变量并在整个宏中跟踪它们的状态。这会告诉我,我的变量仍然存在,它仍然被引用,它突然在代码中的某一点被清空。
实际运行旧宏:因为我认为本地窗口也显示了公共变量,而且它们并不存在。我在其他计算机上所做的就是进入一个宏观,看到它们不在那里,并且假设是最坏的。如果我实际上只是在前一天运行我的任何宏,那么这个问题就可以避免了。
TDD /单元测试:几乎在我介绍它的那一刻,它肯定会抓住我的错误,当然在写入它的几分钟内,这会提供一个关于出了什么问题的大提示甚至在它开始之前就防止了这一切。
不恐慌:我忘了/没有尝试过很多非常明显的事情,其中任何一个都证明我的理论是错误的。相反,因为我认为我遇到了问题,所以我只是寻找可以证实这一点的证据,而不是那些会反驳它的证据。
从好的方面来说,至少我现在比今天早上更聪明。