excel-vba中Application对象属性和方法的范围是什么

时间:2017-03-11 13:24:55

标签: excel excel-vba vba

有人可以让我快速了解Excel-vba中应用程序方法的范围。

我正试图关闭'拖动&删除Excel-vba中的操作,以避免在组中过滤掉或折叠的单元格中丢失数据。我知道实现这一点的唯一方法是这样的

Private Sub Worksheet_Activate() 
    Application.CellDragAndDrop = False
End Sub

我的经验是,应用程序方法会影响Excel中的所有内容。因此,当我的Worksheet_Activate事件触发时,拖动& drop不仅会在整个活动工作簿中停用,而且会在当时在我的计算机上运行的每个工作簿中停用。

我是否正确地进一步假设,关闭'拖动& amp;降'在我的机器上关闭重新启动的Excel之后,它会持续存在吗?那会被存储在哪里?

在我只是办公室网络中的客户端用户的机器上使用应用程序方法会保存吗?或者换句话说,我是否有可能因任何管理员的愤怒而导致关闭'拖动& amp;降'在他们的整个网络中?

2 个答案:

答案 0 :(得分:4)

我担心你的问题没有一个明确的答案。必须单独判断每个应用程序环境设置。

  • 某些应用程序环境属性是只读的,无法以编程方式更改。此类型的示例包括Application.ActiveCellApplication.ActiveWindow
  • 某些应用程序成员根本不是属性,而是命令。 Application.Calculate强制计算周期;它不接受任何价值。
  • 某些应用程序环境设置仅在子设备的持续时间内持续存在,并在子设备完成后恢复。这种类型的一个例子是Application.DisplayAlerts,它可以暂时关闭恼人的确认消息框,但是一旦退出时调用它的子例程再次打开;即它不必以编程方式重置。
  • 某些应用程序环境设置仅在另一个操作取消它们或以编程方式重置之前一直存在。此类型的一个示例是Application.CutCopyMode
  • 某些应用程序环境设置在应用程序实例的持续时间内保持不变。关闭Excel会破坏应用程序对象并重新启动Excel会实例化另一个。同样,在更改一个设置后创建第二个应用程序实例将不会继承更改的环境。例如Application.EnableEventsApplication.ScreenUpdating。这种类型通常在不再需要时重置;经常在子目的结尾。
  • 最后,某些应用程序设置会永久性地更改“文件”中的选项。选项。任何未来的实例都会保留这些更改;是否关闭并重新启动Excel或创建单独工作区中的其他应用程序实例。在更改应用程序环境之前创建的第二个应用程序实例不受影响。出于所有意图和目的,您将重写Excel在注册表中保留的启动选项。示例包括Application.ReferenceStyleApplication.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