SetFocus 是一个函数吗?

Is SetFocus a Function?

我看到这行代码 txtNewCaption.SetFocus 并被告知 SetFocus 用作子 在这里,它也是一个功能。我还在网上读到,sub 和函数之间的区别是 sub 没有 return 任何值,但是函数 return 是一个值。我无法想象 SetFoucs 可以 return 是什么样的值,所以我在网上搜索了很多关于 SetFocus 的文章,但其中 none 给了我一个 [=11] 的例子=] 用作 return 值的函数。我假设我的理解或别人告诉我的内容存在不准确或错误的地方。

你能帮我澄清一下吗?

谢谢!

函数不一定要return一个值。您可以像调用 sub 一样调用函数。自己尝试一下:编写一个函数,在子程序中单步执行该函数,然后检查您的本地人 window。

函数的额外好处是能够 return 值,但不是必须的。

编辑:除了需要 return 一个值之外,我确信有理由使用一个而不是另一个,但我通常根据复杂性来确定是使用子函数还是函数的任务。我使用函数来执行简单的任务,使用子程序来执行更复杂的任务。

如果你search the Microsoft Documentation (MSDN) for SetFocus,你会发现它定义为:

method on a user-interface control object, moving the focus to it ... with no return value

(以上引文非字面引用,只是传达意思)

函数?

因此它不是 VBA 语法中的 函数 。 此外:函数的return值在VBA中是可选的。见 VBA language reference: Function statement:

Optional. Return value of the Function.

常用方法命名约定

在大多数编程语言中,方法的通用命名约定(忽略大小写)适用:

  • 使用get(通常不带参数)来return一个值。此类方法称为 getteraccessor.
  • 使用set(通常使用参数作为要设置的值)来设置新状态(或值)。通常它们没有 return 值,因为新值或状态是由传递的参数(它们的参数)预测的。此类方法称为 settermutator.
  • 使用 ishasexistscontainsstartsends 等 return 布尔值 值。这些方法用于检查标志(on/off、true/false、yes/no)。
  • 使用calculatelocateindexOffindfetchlookupdetermine等。 (通常带有参数)到 return 基于指定参数(通过某些逻辑、数学算法或通过数据检索查询)的某些处理结果的值

好吧,在这个例子中,.setFocus 不是子函数,也不是函数。

sub 是一段单独的代码,你可以这样称呼它

Call MySub

(或更短的形式跳过单词 "call" - 它是可选的) 例如:

MySub

或者,如果有参数,你可以去:

Call MySub(InvoiceNumber)

在函数的情况下?这又是一段外部代码。您可以使用 return 值的函数并忽略 return 值。

所以

MyVar = MyFunction()

和 subs 一样,函数可以接受参数:

MyVar = MyFunction(InvoiceNumber)

正如我所指出的,您可以 "ignore" 函数的 return 值,如下所示:

MyFuncton  InvoiceNumber

如果你按照上面的方式写,你正在传递值,但是函数的 return 值不是 "placed" 或放入任何东西。所以你可以 "use" 一个 return 值的函数。您还可以在传递的值周围跳过 () 的使用。

但是,在上面的两个示例中,我们讨论的是 VBA 子程序和您编写的函数。

SomeTextBox.SetFocus 不是子函数,也不是函数。

上面的叫什么?它被称为对象的方法。

那么,当您使用访问对象时,比如记录集、控件等?那么 "object" 将具有我们所说的属性(通常是您可以设置或从中获取值的东西)。

因此,对于文本框,您有:

MyControl.Value = "Hello"

以上将文本框的值(文本)设置为 Hello。因此,“.value”是该文本框的 属性。它也恰好是默认值 属性。所以你可以去:

MyControl = "Hello"

现在,如果你去:

 Msgbox("Value of MyControl = " & MyControl.Value)

所以 "thing"(一个对象)的 属性 通常可以设置一个值,并且您可以获取(检索)一个值。这称为 属性.

但是,这些对象也有所谓的方法。方法是 "action" 并且类似于 sub/function(但您没有编写该方法)。

这样的方法 "some code" 是对象的一部分 运行。所以有时对象的属性和对象的方法之间的区别是"gray"。一些方法可以接受值和 return 值,但两者(方法和 属性)之间的区别在于更多然后设置值可以用方法发生。 (所以它不仅限于获取和设置)。

一个"method"可以想到一些"action"和代码。使用该方法往往假定某些代码将 运行。 (在大多数情况下,它不是您的代码 - 它 "code" 附加到内置对象。

所以

MyTextBox.SetFocus

它是文本框控件的一个方法,或者是有问题的给定控件。并非所有必要的控件都可能具有此 "method".

所以 .SetFocus 不是子函数,也不是函数,实际上是相关控件的一个方法。