有人可以让我快速了解Excel-vba中应用程序方法的范围。
我正试图关闭'拖动&删除Excel-vba中的操作,以避免在组中过滤掉或折叠的单元格中丢失数据。我知道实现这一点的唯一方法是这样的
Private Sub Worksheet_Activate()
Application.CellDragAndDrop = False
End Sub
我的经验是,应用程序方法会影响Excel中的所有内容。因此,当我的Worksheet_Activate事件触发时,拖动& drop不仅会在整个活动工作簿中停用,而且会在当时在我的计算机上运行的每个工作簿中停用。
我是否正确地进一步假设,关闭'拖动& amp;降'在我的机器上关闭重新启动的Excel之后,它会持续存在吗?那会被存储在哪里?
在我只是办公室网络中的客户端用户的机器上使用应用程序方法会保存吗?或者换句话说,我是否有可能因任何管理员的愤怒而导致关闭'拖动& amp;降'在他们的整个网络中?
答案 0 :(得分:4)
我担心你的问题没有一个明确的答案。必须单独判断每个应用程序环境设置。
Application.ActiveCell
或Application.ActiveWindow
。Application.Calculate
强制计算周期;它不接受任何价值。Application.DisplayAlerts
,它可以暂时关闭恼人的确认消息框,但是一旦退出时调用它的子例程再次打开;即它不必以编程方式重置。Application.CutCopyMode
。Application.EnableEvents
或Application.ScreenUpdating
。这种类型通常在不再需要时重置;经常在子目的结尾。Application.ReferenceStyle
或Application.UseSystemSeparators
。您的Application.CellDragAndDrop
属于最后一类。它是一个Excel,Option保留在当前和所有未来的应用程序实例中,直到通过GUI文件,选项或以编程方式手动重置。如果在另一台计算机上打开工作簿,则它可能会影响该计算机上的Excel环境。
没有任何设置可以在网络上的计算机上更改Excel环境,除非它们打开(并运行)带有宏的工作簿。您需要一个活动的目录网络组策略。
最后,我会添加警告。我不经常被其他人的工作簿改变我自己的环境,但我遇到的一个设置是Application.Calculation
。打开其他人的工作簿后,我发现我自己的Excel环境保留在xlCalculationManual
中,必须通过GUI或VBA的立即窗口更改为xlCalculationAutoMatic
。虽然有可能在应用程序环境设置中引起很多问题,但我特别提到这一点,因为它是迄今为止我遇到的最常见的问题,并且通常是一个无辜的错误;不是黑帽子'努力。如果您在打开其他人的工作簿后没有重新计算自己的公式,请先在此处查看。
答案 1 :(得分:3)
设置是持久的。此外,如果您在工作表事件中添加它,那么如果其他人打开您的书并且宏运行,他们将会#34;赶上"它也是。
您可以通过在workbook_open事件中将其设置为False,然后在workbook_beforeclose中再次将其设置为True来最小化范围。因此,它只会影响您想要的工作簿,并且不太可能搞乱其他任何人的Excel应用程序。
Private Sub workbook_BeforeClose(Cancel As Boolean)
Application.CellDragAndDrop = True
End Sub
有人要求_open事件。你走了。
Private Sub workbook_Open()
Application.CellDragAndDrop = False
End Sub