首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Excel中,作为默认对象的“应用程序”怎么办?

在Excel中,作为默认对象的“应用程序”怎么办?
EN

Stack Overflow用户
提问于 2022-02-03 13:28:36
回答 2查看 142关注 0票数 3

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

代码语言:javascript
复制
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

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

我可以去掉该对话框,配置ApplicationDisplayAlerts属性:

代码语言:javascript
复制
Application.DisplayAlerts = False
Selection.Merge
Selection.Value = Temp
Application.DisplayAlerts = True

这很好用。

因此,由于Application是默认对象,所以我试图清理代码,如下所示:

代码语言:javascript
复制
DisplayAlerts = False
Selection.Merge
Selection.Value = Temp
DisplayAlerts = True

正如您所看到的,我只是省略了提到Application对象。这是允许的,我过去也做过。(如果不是在VBA,那么德尔菲,也许?)

..。但令我惊讶的是,对话框再次出现(尽管按下F1会让我转到官方的"Application.DisplayAlerts“文档

这就留给我一个简单的问题:

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

请注意,我正在使用Excel-365。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-03 14:30:42

DisplayAlerts是一个未声明的变量。

某些Application属性和方法可以(实际上)省略Application

  • ActiveCellActiveSheetActiveWorkbookActiveWindowAddinsChartsSelection等。
  • CalculateEvaluateIntersectRunUnion等。

(但请参阅这个答案为什么/如何工作):

布尔属性(如DisplayAlerts (EnableEventsScreenUpdating等))不属于上述类别。

要避免落入这样的陷阱,一个金科玉律就是在编写宏时使用Option Explicit

票数 6
EN

Stack Overflow用户

发布于 2022-02-03 14:55:13

只是想在“BigBen”的回答中添加一些信息。如果在代码中编写类似于WorkbooksActiveSheet的内容,则VBA并不是在查看Application-object --它正在查看一个名为Global的(相当隐蔽的)对象。

全局对象公开了Application-object的一些(但不是全部)属性和方法,因此ActiveSheet引用的是Application.ActiveSheet --但不是因为Application有一个具有此名称的成员,而是因为全局对象定义了ActiveSheet的意思是Application.ActiveSheet。事实上,甚至连Application-object都是通过全局对象访问的。

几乎没有关于这个全球物体或它的概念的任何信息。我从微软中找到了一个页面,描述了MS的Global,但是唯一的解释是“包含顶级属性和方法,这些属性和方法不需要在Application前面。”对于Excel,我在O‘’Reilly上找到了此页

不时会收到奇怪的错误消息,比如"Excel方法‘范围’对象‘_全局’失败“--这是指向全局对象的指针。我很高兴更多地了解这一对象的概念和机制,但恐怕周围只有很少的人知道得更多(当然,Mathieu Guindon AKA先生Rubber鸭子先生.)。在日常生活中,我们理所当然地认为,像ActiveSheet这样的东西只是起作用。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70972141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档