gpt4 book ai didi

excel - 类模块中是否需要 Me 关键字?

转载 作者:行者123 更新时间:2023-12-02 23:52:29 26 4
gpt4 key购买 nike

这两个子程序在类中执行相同的操作。

Sub DemoMe( )
Me.AboutMe ' Calls AboutMe procedure.
End Sub

Sub DemoMe( )
AboutMe ' Does the same thing.
End Sub

重点是什么? Me 关键字有什么作用吗?对象访问其自身成员的首选方式是什么?

最佳答案

tldr;不,尽管在某些情况下它可能有用。

<小时/>

来自 VBA 语言规范 ( 5.3.1.5 ):

Each procedure that is a method has an implicit ByVal parameter called the current object that corresponds to the target object of an invocation of the method. The current object acts as an anonymous local variable with procedure extent and whose declared type is the class name of the class module containing the method declaration. For the duration of an activation of the method the data value of the current object variable is target object of the procedure invocation that created that activation. The current object is accessed using the Me keyword within the <procedure-body> of the method but cannot be assigned to or otherwise modified.

这就是全部,只是一个“自由”局部变量,它引用正在调用该方法的特定实例。这也恰好是过程调用期间的默认上下文,因此如果代码打算在当前实例上操作,则可以省略它。尽管正如 @HansPassant 在 comment above 中指出的那样,它还允许编辑器绑定(bind)到界面并提供 IntelliSense。

也就是说,在某些情况下您可能想要或必须使用它(这绝不是详尽的列表):

<小时/>

命名冲突:

如果您的类有一个“隐藏”内置 VBA 函数的成员,则可以使用它来使作用域显式化:

Public Property Get Left() As Long
'...
End Property

Public Property Get Right() As Long
'...
End Property

Public Property Get Width() As Long
Width = Me.Right - Me.Left
End Property
<小时/>

股权检查:

Public Function Equals(other As Object) As Boolean
If other Is Me Then
Equals = True
Exit Function
End If
'...
End Function
<小时/>

流畅的功能:

这可能是组合对象的有用模式 - 您执行一个操作,然后返回类的实例,以便它们可以“链接”。 Excel 的 Range 界面在很多情况下都会执行此操作:

Public Function Add(Value As Long) As Class1
'Do whatever.
Set Add = Me
End Function

Public Sub Foo()
Dim bar As New Class1
bar.Add(1).Add(1).Add 1
End Sub

关于excel - 类模块中是否需要 Me 关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54887822/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com