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

 Sub Test()
Dim a As Integer
a =
Add a
Debug.Print a '引用传递,a的值发生了变化,输出101
End Sub Function Add(a As Integer)
a = a +
End Function

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

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

 Sub Test()
Dim a As Integer
a =
Add a
Debug.Print a '值传递,a的值没有变化,输出1
End Sub Function Add(ByVal a As Integer)
a = a +
End Function

调用一个有返回值函数

 Sub Test()
Dim a As Integer
a =
Dim sum As Integer
sum = Add(a)
Debug.Print sum '引用传递,输出101
End Sub Function Add(a As Integer) As Integer
Add = a +
End Function

认识“()”

 Sub Test()
Dim a As Integer
a =
Add (a)
Debug.Print a 'a的值没有变化,输出1
End Sub Function Add(ByRef a As Integer) As Integer
a = a +
End Function

解释:

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

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

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

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

 Sub Test()
Dim arr() As Integer
arr() =
arr() =
arr() = showArray arr
Dim i As Integer
For i = To
Debug.Print arr(i) '输出101,102,103
Next i
End Sub Function showArray(arr() As Integer)
Dim i As Integer
For i = To
arr(i) = arr(i) +
Next i
End Function

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

 Sub Test()
Dim arr() As Integer
arr() =
arr() =
arr() = showArray (arr) '编译时报错:缺少数组或用户定义类型
Dim i As Integer
For i = To
Debug.Print arr(i)
Next i
End Sub Function showArray(arr() As Integer)
Dim i As Integer
For i = To
arr(i) = arr(i) +
Next i
End Function

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

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

 Sub Test()
Dim arr() As Integer
arr() =
arr() =
arr() = showArray (arr)
Dim i As Integer
For i = To
Debug.Print arr(i) '输出1,2,3
Next i
End Sub Function showArray(arr)
Dim sum As Integer, i As Integer
For i = To
arr(i) = arr(i) +
Next i
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. Vimium使用快捷键总结

    chrome 快捷键: ctrl+w 关闭当前标签  ctrl+t 新建标签 gg行首 shift+g 行尾 Vimium使用快捷键总结 j, <c-e> : Scroll down k, ...

  2. Autorelease自动释放池的使用

    Autorelease自动释放池的使用 使用ARC开发,只是在编译时,编译器会根据代码结构自动添加了retain.release和autorelease. MRC内存管理原则:谁申请,谁释放 遇到al ...

  3. 第九章伪代码编程过程 The PseudoCode Programming Process

    目录: 1.创建类和子程序的步骤概述 2.伪代码 3.通过伪代码编程过程创建子程序 4.伪代码编程过程的替代方案 一.创建类和子程序的步骤概述 (1)创建一个类的步骤 1.创建类的总体设计 2.创建类 ...

  4. Android 自定义 view(三)—— onDraw 方法理解

    前言: 上一篇已经介绍了用自己定义的属性怎么简单定义一个view<Android 自定义view(二) -- attr 使用>,那么接下来我们继续深究自定义view,下一步将要去简单理解自 ...

  5. MVC中使用EF增删改查,简单的例子

    //这个是分页数据和总页数类 public class SummaryBase<TModel> { public SummaryBase(); public IList<TModel ...

  6. .net之工作流工程展示及代码分享(三)数据存储引擎

    数据存储引擎是本项目里比较有特色的模块. 特色一,使用接口来对应不同的数据库.数据库可以是Oracle.Sqlserver.MogoDB.甚至是XML文件.采用接口进行对应: public inter ...

  7. iOS解析XML数据

    iOS中解析XML数据的类是  NSXMLParser,详细使用方法如下: 假设现在在内存中有XML的二进制数据对象(NSData):data(该数据可能来自网络,也可能是本地的文件数据),设置NSX ...

  8. Samba快速配置

    Samba是linux,unix,windows之间进行交互操作的软件组件,Sanma是基于GPL协议的自由开源软件. 快速配置samba文件服务器 1.关闭防火墙和SELinux [root@cen ...

  9. logrotate

    logrotate程序是一个日志文件管理工具.用于分割日志文件,删除旧的日志文件,并创建新的日志文件,起到"转储"作用.可以节省磁盘空间. logrotate命令格式:logrot ...

  10. 鸟哥的linux私房菜学习记录之软件安装原始码与Tarball