我整个办公室的所有 Public 个变量今天早上突然停止工作
All Public Variables in my entire office suddenly stopped working this morning
事实证明,我是个白痴(或者,至少,对整个软件开发这件事完全没有经验)。以下是我整天都在恐慌的事情。我会写一个答案,详细说明我所看到的,随后采取的行动以及实际发生的事情。
tl;dr: 我 认为 我的 IDE 是如何工作的以及它 实际上如何 作品是两个独立的东西。实际上我的代码中有一个错误,但由于我如何解释我认为 IDE 告诉我的内容,我认为问题要大得多。我是个白痴,还没有实现版本控制。
我之前写的:
问题比我想象的要大。截至目前,我办公室的每台计算机(我已经检查过 [4])上的每一段 VBA 代码(包括 days/weeks/months 未触及的代码)都表现出这种行为。
Public 在一个模块中声明的变量 public variable as type
没有出现在其他模块中。具体来说,当地人 window 显示 <No Variables>
。据我所知,这发生在格林威治标准时间昨天晚上 9 点 (25/August/2015) 和今天早上格林威治标准时间上午 11 点 (26/august/2015) 之间的某个时间。
这导致我在过去一年中编写的大部分宏都无法运行。请帮忙!
发生了什么: 今天早上我打开了一个宏来扩展它。我 运行 检查它是否仍在工作。它抛出了 "automation error"。
[旁注](我一直习惯于在本地 window 中看到我的全局变量。在模块名称下的一个漂亮的下拉选项卡中。事实证明,只有当您 publicly 在您正在查看的模块中声明它们时会发生这种情况。我不知道这一点,我的新宏在它们自己的单独模块中包含我所有的 public 变量)[return ]
所以,我调试了我的代码,查看了为什么这个工作表对象抛出错误并看到: <No Variables>
in my locals window where my public variables always used成为。自然,我惊慌失措。我认为该程序一定已经停止引用其他模块中的 public 变量。我检查了我办公室的所有其他电脑,同样的事情。我 f运行 特地搜索了互联网。没有关于这个。无奈之下,我求助于 Stack Overflow、Server Fault 和 Super User 以及 Code Review 的聊天室。没有运气。
那我真的慌了。我很乐意打电话给微软技术支持。
不用说,这太糟糕了,我放弃了。离开了一会儿,用我的武士刀(LARP 安全,所以没有对建筑物造成实际损坏)在我们建筑物的空地板上消除我的挫败感。
然后我回来了,回去聊天,和更多的人交谈,尝试了更多的东西,终于找到了关于当地人的东西 window,这让我找到了我的实际问题代码:
我的宏在我尝试引用其工作表的代码中的某个点之前关闭了一个工作簿。就是这样。
总而言之,我浪费了整个工作日试图解决一个不存在的问题。
所以,这是我本可以做/应该做的事情的清单,这些事情可以防止这种情况发生:
版本控制: 具体来说,能够将代码恢复到已知可以正常工作的前一个时间点。这会立即证明我的代码来自例如前一天还是运行符合预期
Window: 中的 VBA IDE 这允许您指定变量并在整个宏中跟踪它们的状态。这会告诉我我的变量仍然存在,它仍然被引用,它只是突然在代码中的某个点被清空。
实际上 运行 旧的宏: 因为我认为局部变量 window 也显示了 public 变量,但它们不是那里。我在其他计算机上所做的只是进入一个宏,看看它们不在那里,然后假设最坏的情况。如果我实际上只是 运行 我一天前的任何宏,这个问题就可以避免。
TDD / 单元测试: 几乎在我介绍它的那一刻就会发现我的错误,当然在编写它的几分钟内,这会提供一个很大的提示关于什么在事情开始之前就出错了,阻止了这一切。
不恐慌:我忘记/没有尝试很多非常明显的事情,其中任何一个都会证明我的理论是错误的。相反,因为我认为我有问题,所以我只去寻找可以证实它的证据,而不是寻找可以反驳它的证据。
从好的方面来说,至少我现在比今天早上聪明多了。
事实证明,我是个白痴(或者,至少,对整个软件开发这件事完全没有经验)。以下是我整天都在恐慌的事情。我会写一个答案,详细说明我所看到的,随后采取的行动以及实际发生的事情。
tl;dr: 我 认为 我的 IDE 是如何工作的以及它 实际上如何 作品是两个独立的东西。实际上我的代码中有一个错误,但由于我如何解释我认为 IDE 告诉我的内容,我认为问题要大得多。我是个白痴,还没有实现版本控制。
我之前写的:
问题比我想象的要大。截至目前,我办公室的每台计算机(我已经检查过 [4])上的每一段 VBA 代码(包括 days/weeks/months 未触及的代码)都表现出这种行为。
Public 在一个模块中声明的变量 public variable as type
没有出现在其他模块中。具体来说,当地人 window 显示 <No Variables>
。据我所知,这发生在格林威治标准时间昨天晚上 9 点 (25/August/2015) 和今天早上格林威治标准时间上午 11 点 (26/august/2015) 之间的某个时间。
这导致我在过去一年中编写的大部分宏都无法运行。请帮忙!
发生了什么: 今天早上我打开了一个宏来扩展它。我 运行 检查它是否仍在工作。它抛出了 "automation error"。
[旁注](我一直习惯于在本地 window 中看到我的全局变量。在模块名称下的一个漂亮的下拉选项卡中。事实证明,只有当您 publicly 在您正在查看的模块中声明它们时会发生这种情况。我不知道这一点,我的新宏在它们自己的单独模块中包含我所有的 public 变量)[return ]
所以,我调试了我的代码,查看了为什么这个工作表对象抛出错误并看到: <No Variables>
in my locals window where my public variables always used成为。自然,我惊慌失措。我认为该程序一定已经停止引用其他模块中的 public 变量。我检查了我办公室的所有其他电脑,同样的事情。我 f运行 特地搜索了互联网。没有关于这个。无奈之下,我求助于 Stack Overflow、Server Fault 和 Super User 以及 Code Review 的聊天室。没有运气。
那我真的慌了。我很乐意打电话给微软技术支持。
不用说,这太糟糕了,我放弃了。离开了一会儿,用我的武士刀(LARP 安全,所以没有对建筑物造成实际损坏)在我们建筑物的空地板上消除我的挫败感。
然后我回来了,回去聊天,和更多的人交谈,尝试了更多的东西,终于找到了关于当地人的东西 window,这让我找到了我的实际问题代码:
我的宏在我尝试引用其工作表的代码中的某个点之前关闭了一个工作簿。就是这样。
总而言之,我浪费了整个工作日试图解决一个不存在的问题。
所以,这是我本可以做/应该做的事情的清单,这些事情可以防止这种情况发生:
版本控制: 具体来说,能够将代码恢复到已知可以正常工作的前一个时间点。这会立即证明我的代码来自例如前一天还是运行符合预期
Window: 中的 VBA IDE 这允许您指定变量并在整个宏中跟踪它们的状态。这会告诉我我的变量仍然存在,它仍然被引用,它只是突然在代码中的某个点被清空。
实际上 运行 旧的宏: 因为我认为局部变量 window 也显示了 public 变量,但它们不是那里。我在其他计算机上所做的只是进入一个宏,看看它们不在那里,然后假设最坏的情况。如果我实际上只是 运行 我一天前的任何宏,这个问题就可以避免。
TDD / 单元测试: 几乎在我介绍它的那一刻就会发现我的错误,当然在编写它的几分钟内,这会提供一个很大的提示关于什么在事情开始之前就出错了,阻止了这一切。
不恐慌:我忘记/没有尝试很多非常明显的事情,其中任何一个都会证明我的理论是错误的。相反,因为我认为我有问题,所以我只去寻找可以证实它的证据,而不是寻找可以反驳它的证据。
从好的方面来说,至少我现在比今天早上聪明多了。