1

第一篇文章,但不是第一次访问者——这个论坛在过去 3 年里对我的 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 是/应该是什么感到困惑,我无法解释它。

4

1 回答 1

0

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

于 2019-04-29T21:19:03.517 回答