access sum函数出错_过程和函数

8f1e3255d4aeff3976b3da8772bec588.png

      VBA代码有两种组织形式,一种是过程,另一种就是函数。其实过程和函数有很多相同之处,除了使用的关键字不同之外,还有不同的是:

      函数有返回值,过程没有。

      函数可以在Access窗体,查询中像一般的Access函数那样使用,但过程不可以。

      过程可以指定给Access窗体中的按钮或者图片等对象,但是函数不可以。

      函数只能在被调用时执行,比如在过程中调用,或者在另一个函数中调用,或者在Access窗体中调用。但不能直接执行,而过程是可以的。

      虽然可以把所有代码都放在一个过程,或者一个函数里面,但是这样会使代码难以维护,特别是非常不便于其他人查看修改。而有时一些重复性的代码,也应该把它们独立出去,作为一个子过程或子函数来组织。使用子过程和子函数的目的,就是为了便于组织代码、便于维护。

1. 过程 Sub

      过程以Sub开头,End Sub结束,过程中需要执行的代码放在中间。格式如下: 

Sub 过程名()

    ' 需要在过程中执行的代码

End Sub

      过程名后面的括号是必须的,过程可以带参数,就放置在括号里面,稍后会有说明。

     过程示例:

Sub test()

    Debug.Print "Hello"

End Sub

2. 函数 Function

      与过程类似,函数的格式如下:

Function 函数名(参数1, 参数2, ...) As 数据类型

    ' 需要在函数中执行的代码

    函数名 = 函数执行后的结果

End Function

      函数名后面的括号是必须的,函数通常都带有参数,放置在括号里面。函数也可以不带参数,但这种情况下的函数通常没什么意义。

      括号后面的 As 数据类型 虽然并不是必须的,但是我强烈建议加上。因为函数通常都需要有 返回值,这个数据类型就表示着返回值的数据类型。

      函数体最后通常都带有一条返回值语句,把函数执行的结果赋值给函数名,就可以在调用这个函数的地方得到这个函数的执行结果。这个返回结果的数据类型应该与函数名后面As的数据类型一致,否则可能会出错。

     函数示例:

Function my_sum(n1 as Integer, n2 as Integer) As Integer

    Dim s As Integer

    s = n1 + n2

    my_sum = s

End Function

      上例中定义了一个名为my_sum的函数,它接受两个类型为Integer的参数,并且返回值是Integer类型。在函数内部计算了这两个参数相加的和,并把这个和作为返回值赋给my_sum。可以通过调用这个函数,并传递相应的参数,获得它的返回值。

定义函数后,就可以在VBA中的过程,或者其它函数中使用这个函数了。

3. 过程和函数的调用

      前面说过,过程和函数,都可以是被相互调用的。

3.1 过程的调用

      格式1:

Call过程名

      格式2:

Call 过程名(参数1, 参数2, ...)

      如果过程不带参数,那么可以使用第1种格式,过程名后面不需要括号。

      如果过程带有参数,则要按照参数的顺序依次把参数写到过程名后面的括号中。即使用第2种格式。

3.2 函数的调用

      函数的调用通常会在调用时把其赋值给一个变量,以获取函数返回值。

Sub test()

    Dim s As Integer

    s = my_sum(5, 5)

    Debug.Print s

End Sub

Function my_sum(n1 As Integer, n2 As Integer) As Integer

    Dim s As Integer

    s = n1 + n2

    my_sum = s

End Function

      这里应该提出的是,函数应当要有返回值的,因为如果不需要返回值,那就应该直接使用过程而不是函数了。

4. 参数的使用

      参数和使用对于过程和函数都是一样的。所以本节的内容对过程和函数都适用。

      参数可分为可选参数和必选参数两种。必选参数在调用(过程或函数时)必须加上,否则会报错。可选参数则可写可不写。默认是必选参数,可选参数在定义时用Optional关键字声明,并且可选参数必须放在参数列表的最后面。

4.1 必选参数

      必选参数在定义时放置在过程或函数名后面的括号中,格式为:

      参数名 As 参数类型

如:

Sub sub_test(s As String)

    Debug.Print s

End Sub

在调用时,必须传入参数:

Sub test()

    Call sub_test("hello")

End Sub

4.2 可选参数

      格式与必选参数类似,只是在参数名前面用Optional声明参数是可选的。

      Optional 参数名 As 参数类型

如:

Sub sub_test(Optional s As String)

    Debug.Print s

End Sub

      在调用上述过程时,可以不传入参数,此时则不会输出任何东西,也不会报错,因为参数是可选的。如果传入了参数,则会输出这个参数。

      可选参数还可以设置默认值,即如果在调用时不显式传入这个参数的话,那么就使用定义时所使用的值。如下过程:

 Sub sub_test(Optional s As String = "Hello, World")

    Debug.Print s

End Sub

带参数调用:

Sub test()

    Call sub_test("I am a boy")

End Sub

输出:I am a boy

不带参数调用:

Sub test()

    Call sub_test

End Sub

输出:Hello, World

4.3 同时使用可选参数与必选参数

      此时可选参数必须放在最后 

Sub sub_test(var As Integer, Optional s As String = "Hello, World")

    Debug.Print var

    Debug.Print s

End Sub

      只传入必选参数:

Sub test()

    Call sub_test(50)

End Sub

      输出:

50

Hello, World

      同时传入可选参数与必选参数:

Sub test()

   Call sub_test(50, "Hi, Meinv")

End Sub

      输出:

50

Hi, Meinv

End 推荐阅读 bc0ee0bdadfed4a7beb0487912467234.png Access训练营  从0基础开始,循序渐进,系统化的训练营课程,整合作业、课表、社群,为学员提供答疑,获得更佳的学习效果。【 详情>> 】   e9805d6f696dbd69d4ddad22f57d2038.png Access专家课堂 是Access数据库爱好者提升技能的专业课堂,由微软最有价值专家张志创办,课堂有众多Access课程,可通过电脑或微信学习。【 详情>> 】   c7f3935637385b17feccc5f4670c9737.png Access软件作品  十二位Access学员对自已开发的软件进行了介绍并分享开发心得,一起来了解Access开发的软件。【 详情>> 】   df5da520d9a4ee0105dfe616d5b5e125.png 从Excel到Access数据库  为广大Excel用户了解、学习Access数据库开设的一个实用课程,侧重于数据统计分析。【 详情>> 】   00fcbb5ffbbbe6973195d415cbedfbb8.png Access每天3分钟  视频课程共50集,Access的基础知识并结合示例详细讲解,每集视频只有短短几分钟,学员可以利用碎片化的时间,每天进步一点点【 详情>> 】   3f3d575c320016e16438863ad1e39b93.png 张志,Access数据库培训讲师,『Access软件网』创始人,服务过的知名企业有北京奔驰、立达(中国)纺织仪器、宜家(中国)投资等。 2003~2013年连续10年获微软最有价值专家。【详情>>】  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值