Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 今天早上,我整个办公室的所有公共变量突然停止工作_Vba_Excel_Scope_Global Variables_Public - Fatal编程技术网

Vba 今天早上,我整个办公室的所有公共变量突然停止工作

Vba 今天早上,我整个办公室的所有公共变量突然停止工作,vba,excel,scope,global-variables,public,Vba,Excel,Scope,Global Variables,Public,事实证明,我是个白痴(或者,至少,对整个软件开发毫无经验)。下面是我一整天都在担心的事情。我会写一个答案,详细说明我看到了什么,接下来的行动以及实际发生了什么 tl;dr:我认为我的IDE是如何工作的和它实际上是如何工作的是两件不同的事情。实际上,我的代码中有一个bug,但由于我如何解释IDE告诉我的内容,我认为问题更大。我是个白痴,因为我还没有实现版本控制 我之前写的: 问题比我想象的更严重。到目前为止,我办公室(我已经检查过[4])的每台计算机上的每一段VBA代码(包括数天/数周/数月未被触

事实证明,我是个白痴(或者,至少,对整个软件开发毫无经验)。下面是我一整天都在担心的事情。我会写一个答案,详细说明我看到了什么,接下来的行动以及实际发生了什么

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

我之前写的:

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

在模块中声明的类型为的公共变量
不会出现在其他模块中。具体来说,本地人窗口显示
。据我所知,这发生在格林威治标准时间昨天晚上9点(2015年8月25日)和格林威治标准时间今天上午11点(2015年8月26日)之间


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

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

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

因此,我调试了我的代码,查看了这个工作表对象抛出错误的原因,并在我的局部变量窗口中看到:
,我的公共变量总是在该窗口中。当然,我很惊慌。我想程序一定已经停止引用其他模块中的公共变量了。我检查了办公室里所有的电脑,同样的事情。我疯狂地上网搜索。这上面没什么。绝望中,我转向了堆栈溢出和服务器故障,以及超级用户和代码审查时的聊天室。不走运

然后我真的很惊慌。我很乐意打电话给Microsoft技术支持。

不用说,事情发展得如此糟糕,以至于我放弃了。我离开了一会儿,用我的武士刀在我们大楼的空地板上发泄了我的沮丧(LARP安全,所以大楼没有实际损坏)

然后我回来,继续聊天,与更多的人交谈,尝试了更多的东西,最终发现了本地人窗口的问题,这让我找到了代码的实际问题:

我的宏在代码中试图引用工作簿工作表的点之前关闭工作簿。就这样

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

因此,下面列出了我本可以做/应该做的可以防止这种情况发生的事情:

版本控制:特别是,能够将代码还原到已知工作的前一个时间点。这将立即证明,我的代码(例如前一天的代码)仍按预期运行

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

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

TDD/单元测试:几乎在我介绍它的那一刻就发现了我的错误,当然在写它的几分钟之内,这将提供一个关于出错原因的重要提示,并在它开始之前阻止整个事情的发生

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


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

尝试使用AppsPro提供的代码清理器:我已经确定,不管这是什么,它都是在办公室范围的应用程序级别,而不是我的代码。