ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: cui26896

[分享] 对Sub及Function语句的定义

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-24 12:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
调用 Sub 和 Function 过程

若要从其他过程中调用某个 Sub 过程,请键入该过程的名称并包含任何所需的参数值。To call a Sub procedure from another procedure, type the name of the procedure and includevalues for any required arguments. 不需要使用 Call 语句,但如果使用了该语句,则必须将任何参数包含在圆括号内。The Callstatement is not required, but if you use it, you must enclose any arguments inparentheses.

You can use a Subprocedure to organize other procedures so they are easier to understand anddebug.You can use a Subprocedure to organize other procedures so they are easier to understand anddebug. In the following example, the Sub procedure Main calls the Subprocedure MultiBeep, passing the value 56 for its argument.In the following example, the Sub procedure Main calls the Sub procedure MultiBeep, passing the value 56 for its argument.

当 MultiBeep 运行后,控件返回到 Main,且 Main 调用 Sub 过程 Message。AfterMultiBeep runs, control returns to Main, and Main calls the Sub procedure Message. Message 显示一个消息框,当用户单击“确定”**** 时,控件返回到 Main,且 Main 完成。Message displays a message box; when the userclicks OK, control returns to Main, and Main finishes.

VB复制

Sub Main()

MultiBeep 56

Message

End Sub


Sub MultiBeep(numbeeps)

For counter = 1 Tonumbeeps

Beep

Next counter

End Sub


Sub Message()

MsgBox "Timeto take a break!"

End Sub

使用多个参数调用Sub 过程Call Subprocedures with more than one argument

下面的示例演示了使用多个参数调用 Sub 过程的两种方法。The following example shows two ways to calla Sub procedure with more than one argument. 第二次调用它时,需要将参数包含在圆括号内,因为使用了Call 语句。The second time it is called,parentheses are required around the arguments because the Call statementis used.

VB复制

Sub Main()

HouseCalc 99800, 43100

Call HouseCalc(380950, 49500)

End Sub


Sub HouseCalc(price AsSingle, wage AsSingle)

If 2.5 * wage <= 0.8 * price Then

MsgBox "Youcannot afford this house."

Else

MsgBox "Thishouse is affordable."

End If

End Sub

在调用Function 过程时使用圆括号Useparentheses when calling function procedures

若要使用函数的返回值,请将该函数分配给变量并将参数包含在圆括号内,如以下示例所示。To use the return value of a function, assignthe function to a variable and enclose thearguments in parentheses, as shown in the following example.

VB复制

Answer3 = MsgBox("Areyou happy with your salary?", 4, "Question3")


如果对函数的返回值不感兴趣,则可以按照调用 Sub 过程的同样方式调用函数。If you are not interested in the return valueof a function, you can call a function the same way you call a Subprocedure. 省略圆括号,列出参数,且不要将函数分配给变量,如以下示例所示。Omit the parentheses, list thearguments, and do not assign the function to a variable, as shown in thefollowing example.

VB复制

MsgBox "TaskCompleted!", 0, "Task Box"


如果您在上述示例中包含圆括号,则该语句将导致语法错误。If you include parentheses in thepreceding example, the statement causes a syntax error.

传递命名参数Pass named arguments

SubFunction 过程中的语句可使用命名参数将值传递给所调用的过程。A statement in a Sub or Functionprocedure can pass values to called procedures by using named arguments. 您可以按照任何顺序列出命名参数。You can list named arguments inany order. 命名参数包含参数的名称后跟一个冒号和一个等号 (:=) 以及分配给该参数的值。A named argument consists of the name of the argument followed bya colon and an equal sign (:=), and the value assigned to the argument.

以下示例使用命名参数调用 MsgBox 函数,而不返回任何值。The following example calls the MsgBoxfunction by using named arguments with no return value.

VB复制

MsgBox Title:="TaskBox", Prompt:="TaskCompleted!"


以下示例使用命名参数调用 MsgBox 函数。The following example calls the MsgBoxfunction by using named arguments. 将返回值分配给变量。The return value is assigned tothe variable.

VB复制

answer3 = MsgBox(Title:="Question 3", _

Prompt:="Areyou happy with your salary?", Buttons:=4)


另请参阅See also

·        在代码中使用圆括号




TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-24 12:51 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

在代码中使用圆括号

Sub过程、内置语句和一些方法不返回值, 因此不会将参数括在括号中。 例如:

MySub"stringArgument", integerArgument

函数过程、内置函数和一些方法都返回一个值, 但您可以忽略它。 如果忽略返回值,则不包括括号。 就像调用 Sub 过程一样调用此函数。 省略括号,列出任何参数,并且不将此函数分配给变量。 例如:

MsgBox"Task Completed!", 0, "Task Box"

若要使用函数的返回值,请将参数包含在括号中,如下面的示例所示。

Answer3= MsgBox("Are you happy with your salary?", 4, "Question3")

Sub或Function过程中的语句可以使用命名参数将值传递给被调用的过程。不管您是否使用命名参数,针对使用括号的指南都适用。 当您使用命名参数时,您可以按任意顺序列出它们,并且您可以省略可选的参数。 命名参数的后面总是跟有一个分号和一个等号 (:=),然后是参数值。

下面的示例使用命名参数调用MsgBox函数, 但它将忽略返回值。

MsgBoxTitle:="Task Box", Prompt:="Task Completed!"

下面的示例使用命名参数调用MsgBox函数, 并将返回值分配给变量。

answer3= MsgBox(Title:="Question 3", _

Prompt:="Are you happy with yoursalary?", Buttons:=4)




TA的精华主题

TA的得分主题

 楼主| 发表于 2019-6-24 14:58 | 显示全部楼层
真是此一时,彼一时,按照现行所有能看到的正常说法,VBA没有return语句,但在官方的定义中,我惊异地发现,现在已经有了!!!


GoSub .。。Return 语句

分支到过程中的子例程并从该子例程返回。

语法

GoSub line
...
...
Return




Line 参数可以是任何行标签行号

备注

可以在过程中的任何位置使用 GoSubReturn,但 GoSub 和相应的 Return 语句必须在同一个过程中。 虽然一个子例程可以包含多个 Return 语句,但遇到的第一个 Return 语句会导致执行流分支回到紧跟最新执行的 GoSub 语句的语句

备注

无法使用 GoSub...Return 进入或退出 Sub 过程。

提示

通过创建可调用的独立过程,可以提供针对使用 GoSub...Return 的更加结构化的替代项。

示例

此示例使用 GoSub 调用 Sub 过程中的子例程。 Return 语句将导致执行在紧跟 GoSub 语句的语句上继续。 Exit Sub 语句用于防止控件意外地流入子例程中。

VB 复制

Sub GosubDemo()
Dim Num
' Solicita number from the user.
Num = InputBox("Enter a positivenumber to be divided by 2.")
' Only useroutine if user enters a positive number.
If Num > 0 Then GoSub MyRoutine
Debug.Print Num
Exit Sub ' Use Exit to prevent an error.
MyRoutine:
Num = Num/2 ' Perform the division.
Return ' Return control tostatement.
End Sub ' following the GoSubstatement.



TA的精华主题

TA的得分主题

发表于 2024-9-21 15:48 | 显示全部楼层
本帖最后由 忘得快 于 2024-9-21 15:52 编辑
lsdongjh 发表于 2019-6-24 11:35
其实没必要说这么复杂,两者总体上一致,唯一的、最大的区别是funciton可以有返回值!
简单的说:
    如 ...

请教各位大侠:Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long,64位的VBA提示错误,请问如何解决?谢谢!

TA的精华主题

TA的得分主题

发表于 2024-9-21 15:50 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
cui26896 发表于 2019-6-24 12:36
了解命名参数和可选参数

当您调用**Sub** 或**Function** 过程时, 您可以按它们出现在过程定义中的顺序 ...

请教各位大侠:Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long,此语句64的Excel文件不可用,请问如何解决?谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-19 01:20 , Processed in 0.026793 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表