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

有人可以给我一个快速的想法在Excel-vba中的应用程序的方法。

我正试图在Excel-vba中closures“拖放”操作,以避免单元格中的数据被过滤掉或在组中折叠。 只有我知道要实现这一点是这样的

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

我的经验是,应用程序的方法影响Excel中的一切。 因此,当我的Worksheet_Activate事件触发时,拖放将不仅在整个活动工作簿中,而且在当时在我的机器上运行的每个工作簿中都被禁用。

我是否正确地进一步假设,即使closures了我的机器上重新启动的Excel,closures“拖放”仍然会持续下去? 那将被存储在哪里?

在我只是办公室networking中的客户端用户的机器上使用应用程序方法会节省吗? 或者换句话说,我是否会因为在整个networking中closures“拖放”而招致pipe理员的愤怒?

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

  • 某些应用程序环境属性是只读的,不能以编程方式更改。 这种types的例子是Application.ActiveCellApplication.ActiveWindow
  • 一些应用程序成员根本不是属性,而是命令。 Application.Calculate强制执行一个计算周期; 它不接受一个价值。
  • 一些应用程序环境设置只在子的持续时间内保留,一旦子完成后恢复。 这种types的例子是Application.DisplayAlerts ,它可以暂时closures烦人的确认消息框,但是一旦子程序被调用就退出; 即它不必以编程方式重置。
  • 一些应用程序环境设置只会持续到另一个操作取消它们,或者它们以编程方式重置。 这种types的一个例子是Application.CutCopyMode
  • 某些应用程序环境设置在应用程序实例期间持续存在。 closuresExcel将销毁应用程序对象,并重新启动Excel实例化另一个对象。 同样,在更改设置后创build第二个应用程序实例也不会inheritance已更改的环境。 这个例子是Application.EnableEventsApplication.ScreenUpdating 。 这种types通常在不再需要时重置; 通常在一个子结尾。
  • 最后,一些应用程序设置半永久性地改变在文件>选项中find的选项。 任何未来的实例都会保留这些更改; 是否closures并重新启动Excel,或创build单独工作区中的其他应用程序实例。 在更改应用程序环境之前创build的第二个应用程序实例不受影响。 对于所有意图和目的,您正在重写保留在registry中的Excel启动选项。 例子是Application.ReferenceStyleApplication.UseSystemSeparators

你的Application.CellDragAndDrop属于最后一个类别。 这是一个Excel,Option保留在当前和所有将来的应用程序实例中,直到通过GUI File,Options或以编程方式手动重置为止。 如果工作簿在另一台计算机上打开,则可能会影响该计算机上的Excel环境。

除非使用macros打开(并运行)工作簿,否则不能通过networking更改计算机上的Excel环境。 你需要一个活动目录networking组策略。

最后,我会添加一个警告。 我不会经常被其他人的工作簿改变我自己的环境,但一个设置,我被抓到的是Application.Calculation 。 打开别人的工作簿后,我发现我自己的Excel环境保留在xlCalculationManual ,必须通过GUI或VBA的立即窗口将其更改为xlCalculationAutoMatic 。 虽然有可能导致应用程序环境设置的很多问题,但我特别提到这一点,因为它是迄今为止我遇到的最常见的一个,通常是一个无辜的错误; 不是“黑帽子”的努力。 如果在打开其他人的工作簿后不重新计算自己的公式,请先点击此处。

该设置是持久的。 另外,如果将其添加到工作表事件中,那么如果其他人打开您的书籍并运行macros,他们也会“捕捉”它。

您可以通过在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