代码之家  ›  专栏  ›  技术社区  ›  Dominique

Excel VBA中的默认对象是“应用程序”吗?

  •  0
  • Dominique  · 技术社区  · 4 年前

    我刚刚在Excel VBA中编写了这个简单的宏,用于合并一组选定的单元格:

    Sub Macro_Merge()
    Dim Temp As String
    Dim S As Variant
    
    Temp = ""
    For Each S In Selection
      If Temp = "" Then
        Temp = CStr(S.Value)
      Else:
        Temp = Temp + "," + CStr(S.Value)
      End If
    Next
    
    Selection.Merge
    Selection.Value = Temp
    Selection.VerticalAlignment = xlTop
      
    End Sub
    

    这很好,但我总是看到那个恼人的对话框,警告我在合并时丢失数据(这正是我在宏中试图避免的)。

    我可以去掉那个对话框,配置 Application 是的 DisplayAlerts 财产:

    Application.DisplayAlerts = False
    Selection.Merge
    Selection.Value = Temp
    Application.DisplayAlerts = True
    

    这很好用。
    所以,作为 应用 是默认对象,我试图清理代码,如下所示:

    DisplayAlerts = False
    Selection.Merge
    Selection.Value = Temp
    DisplayAlerts = True
    

    如你所见,我只是略去提及 应用

    ... 但令我惊讶的是,对话框再次出现(尽管按F1键会让我感到 the official "Application.DisplayAlerts" documentation ).
    这给我留下了一个简单的问题:

    如果一个简单的 DisplayAlerts = ... 不等于 Application.DisplayAlerts = ... 再说了,这意味着什么,我该如何使用它?

    仅供参考,我正在使用Excel-365。

    0 回复  |  直到 4 年前
        1
  •  6
  •   BigBen    4 年前

    DisplayAlerts 是一个未声明的变量。

    某些 Application 属性和方法可以(有效地)具有 应用 省略:

    • ActiveCell , ActiveSheet , ActiveWorkbook , ActiveWindow , Addins , Charts , Selection
    • Calculate , Evaluate , Intersect , Run , Union

    (但请看 this answer 原因/工作原理):

    布尔属性,如 显示警报 ( EnableEvents , ScreenUpdating 等)不属于上述类别。

    为了避免落入这样的陷阱,一条黄金法则就是使用 Option Explicit 在编写宏时。

        2
  •  6
  •   FunThomas    4 年前

    只是为了给@BigBen的答案添加一些信息。如果你写了 Workbooks ActiveSheet 在您的代码中,VBA没有查看 Application -对象-它正在查看一个名为 Global .

    全局对象公开了 应用 -反对,所以 活动表 指的是 Application.ActiveSheet -但不是因为 应用 具有具有此名称的成员,但因为全局对象定义了该名称 活动表 方法 应用活动表 .事实上 应用 -对象是通过全局对象访问的。

    几乎没有关于这个全局对象或其概念的任何信息。我从中找到了一页 Microsoft 描述MS Word的全局对象,但唯一的解释是 “包含不需要在应用程序属性前面的顶级属性和方法。” .对于Excel,我发现 this page 奥莱利。

    有时你会收到奇怪的错误信息,比如 “Excel VBA方法”“范围”“对象”“全局”“失败” -这是指向全局对象的指针。我很乐意了解更多关于这个物体的概念和力学,但恐怕只有很少的人知道更多(当然除了马修·吉尼登,又名鲁伯杜克先生…)。在日常生活中,我们理所当然地认为 活动表 这很管用。

    推荐文章