宏混淆区分ActiveWorkbook和ThisWorkbook

时间:2019-04-29 13:35:47

标签: excel vba

第一个帖子,但不是第一次访问者-在过去的三年中,该论坛对发展我的VBA编码技能提供了宝贵的帮助-非常感谢。

这是我遇到的一个奇怪的问题。

我已经创建了一个月底模板供团队使用。 该模板存储了许多宏,包括一些通过键盘快捷键激活的宏。这些快捷方式激活的宏都以CSV格式在其他报表上运行。

我确保如果活动工作簿是主工作簿,则宏将停止运行,因为它会进行很多格式化,并且会严重损坏主工作簿。

因此,此故障安全短代码每天将运行数百次.....,偶尔每月一次或两次,excel会感到困惑。即使ActiveWorkbook不是ThisWorkbook,它的行为也一样,并中止了宏。

'防止在月末分配模板上运行宏

Dim w As Workbook

Set w = ActiveWorkbook

If w Is ThisWorkbook Then
Exit Sub

End If

我无法真正解决这个问题,代码非常简单,并且100%防止了对主工作簿(实际上是主要事情)的有害破坏,但是偶尔会阻止格式化宏在其他工作簿上运行。

在极少数情况下,用户不得不关闭所有excel工作簿,并且重新打开后,它将再次正常运行。 :|

这只是一个Excel错误吗?这里有我没有考虑的东西,应该改进此代码吗?我喜欢它的简单性,并且它可以100%避免损坏主工作簿,我很生气,Excel似乎对ThisWorkbook是/应该是什么感到困惑,而且我无法解释。

1 个答案:

答案 0 :(得分:0)

任何您不希望用户搞砸的主工作簿都应具有由宏关闭和打开的保护。将数据与视图分开。锁定视图并仅修改数据。对您来说,这意味着CSV将导入到隐藏工作表中的列中,然后带有链接的数据表的受保护工作表上的数据将神奇地更新。应该没有格式化宏。格式是静态的。链接的数据发生了什么变化。