将变量做为参数传递给方法

  1. Sub Test()
  2. Dim a As Integer
  3. a =
  4. Add a
  5. Debug.Print a '引用传递,a的值发生了变化,输出101
  6. End Sub
  7.  
  8. Function Add(a As Integer)
  9. a = a +
  10. End Function

结论:VB传参时默认是引用传递byRef。

使用byVal关键字强制形参为值传递

  1. Sub Test()
  2. Dim a As Integer
  3. a =
  4. Add a
  5. Debug.Print a '值传递,a的值没有变化,输出1
  6. End Sub
  7.  
  8. Function Add(ByVal a As Integer)
  9. a = a +
  10. End Function

调用一个有返回值函数

  1. Sub Test()
  2. Dim a As Integer
  3. a =
  4. Dim sum As Integer
  5. sum = Add(a)
  6. Debug.Print sum '引用传递,输出101
  7. End Sub
  8.  
  9. Function Add(a As Integer) As Integer
  10. Add = a +
  11. End Function

认识“()”

  1. Sub Test()
  2. Dim a As Integer
  3. a =
  4. Add (a)
  5. Debug.Print a 'a的值没有变化,输出1
  6. End Sub
  7.  
  8. Function Add(ByRef a As Integer) As Integer
  9. a = a +
  10. End Function

解释:

    1、Add只有一个参数,并且是“过程式调用”方式的时候,VBE“偷偷”把代码自动改为了Add   (a)。注意,Add和(a)之间有个“空格”

    2、()在此有完全不同的意义,可以理解它是一个运算符。(a)生成了一个临时变量,a的一个副本,然后将这个临时变量(a)传递给Add

    3、a本身并没有传递给Add方法,所以a的值并不会有任何变化。

将一个数组做为参数传递给方法:

  1. Sub Test()
  2. Dim arr() As Integer
  3. arr() =
  4. arr() =
  5. arr() =
  6.  
  7. showArray arr
  8. Dim i As Integer
  9. For i = To
  10. Debug.Print arr(i) '输出101,102,103
  11. Next i
  12. End Sub
  13.  
  14. Function showArray(arr() As Integer)
  15. Dim i As Integer
  16. For i = To
  17. arr(i) = arr(i) +
  18. Next i
  19. End Function

和()有关的一个常见错误和保留问题:

  1. Sub Test()
  2. Dim arr() As Integer
  3. arr() =
  4. arr() =
  5. arr() =
  6.  
  7. showArray (arr) '编译时报错:缺少数组或用户定义类型
  8. Dim i As Integer
  9. For i = To
  10. Debug.Print arr(i)
  11. Next i
  12. End Sub
  13.  
  14. Function showArray(arr() As Integer)
  15. Dim i As Integer
  16. For i = To
  17. arr(i) = arr(i) +
  18. Next i
  19. End Function

      编译报错:缺少数组或用户定义类型,除了()生成了一个临时变量之外,与此有关的原因暂不明。。       

如果形参是arr而不是arr()

  1. Sub Test()
  2. Dim arr() As Integer
  3. arr() =
  4. arr() =
  5. arr() =
  6.  
  7. showArray (arr)
  8. Dim i As Integer
  9. For i = To
  10. Debug.Print arr(i) '输出1,2,3
  11. Next i
  12. End Sub
  13.  
  14. Function showArray(arr)
  15. Dim sum As Integer, i As Integer
  16. For i = To
  17. arr(i) = arr(i) +
  18. Next i
  19. End Function

VBA中方法传参的更多相关文章

  1. MyBatis dao层 方法传参

    MyBatis dao层 方法传参有三种方法. 1. 以下标的方法获取参数. <update id="insertSuccessKilled">       INSER ...

  2. 再谈Java方法传参那些事

    把一个变量带进一个方法,该方法执行结束后,它的值有时会改变,有时不会改变.一开始会觉得--“好神奇呀”.当我们了解java内存分析的知识后,一切都是那么简单明了了--“哦,这么回事呀”.但是今天的上机 ...

  3. 在Java中动态传参调用Python脚本

    最近,又接触到一个奇葩的接口,基于老板不断催促赶时间的情况下,在重写java接口和复用已有的python脚本的两条路中选择了后者,但是其实后者并没有好很多,因为我是一个对python的认识仅限于其名称 ...

  4. 对象引用 方法传参 值传递 引用传递 易错点 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  5. java的方法传参,最容易混淆的问题!!!

    参数传递 参数传递,可以理解当我们要调用一个方法时,我们会把指定的数值,传递给方法中的参数,这样方法中的参数就拥有了这个指定的值,可以使用该值,在方法中运算了.这种传递方式,我们称为参数传递. 在这里 ...

  6. vue 使用 axios 时 post 请求方法传参无法发送至后台

    axios 时 post 请求方法传参无法发送至后台报错如下 Response to preflight request doesn't pass access control check: No ' ...

  7. EasyUI queryParams属性 在请求远程数据同时给action方法传参

    http://www.cnblogs.com/iack/p/3530500.html?utm_source=tuicool EasyUI queryParams属性 在请求远程数据同时给action方 ...

  8. javascript 字符串方法传参

    javascript 字符串方法传参由于嵌套的单引号,双引号过多.有点混乱.. 正确方法如下: '   <td align="left"><input type= ...

  9. Python中的传参是传值还是传址?

    传值:在C++中,传值就是把一个参数的值给这个函数,其中的更改不会影响原来的值. 传址:即传引用,直接把这个参数的内存地址传递进去,直接去这个内存地址上进行修改. 但是这些在Python中都没有,Py ...

随机推荐

  1. spark读取hdfs上的文件和写入数据到hdfs上面

    def main(args: Array[String]): Unit = { val conf = new SparkConf() conf.set("spark.master" ...

  2. spark编写word count

    创建SparkContext对象的时候需要传递SparkConf对象,SparkConf至少需要包含spark.master和spark.app.name这两个参数,不然的话程序不能正常运行 obje ...

  3. 解决Windows下网络原因Composer安装失败问题

    由于Composer镜像都在国外,所以直接在官网下载Windows Installer后安装很多情况下是无法成功安装的. 解决办法: 1,将php添加到系统环境变量,并开启openssl扩展. 2,点 ...

  4. Add&Delete WindowService

    Part One-Add: Step4: Add the new service to windows service: $commandLine = 'D:\IMS\2.16.0.42-DataSe ...

  5. SpringMVC参数自动绑定

    SpringMVC的各种参数绑定方式 1. 基本数据类型(以int为例,其他类似):Controller代码: @RequestMapping("saysth.do") publi ...

  6. hashmap的底层实现

    HashMap的底层实现都是数组+链表结构实现的,添加.删除.获取元素都是先计算hash值,根据hash值和table.length计算出index也就是table的数组的下标,然后进行相应的操作. ...

  7. 关于Java内存模型的解读

    运行时数据区域 运行时数据区包括以下五大部分:方法区.堆.虚拟机栈.本地方法栈.程序计数器.其中,方法区和堆是由所有线程共享的数据区,其他区域是线程隔离的数据区. 程序计数器: 程序计数器是一块较小的 ...

  8. eclipse进行编译时总是有javascript validator错误提示

    右击工程项目的properties——builders——去掉对javascript的验证就ok啦

  9. Hdu 2845 Beans

    Beans Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

  10. AS3中 Event 类的target和currentTarget属性

    在事件处理过程中,会自动生成事件类的实例,并传给侦听器函数.通过这个参数就可以使用事件类的属性和方法.其中target与currentTarget属性是两个很相似的属性. 对于简单的事件处理过程,分清 ...