目录

示例

代码

使用含有参数的过程供多个过程调用

含有参数的过程的声明方法

编写含有参数的过程的方法

使用Application. Run调用过程


示例

在VBA编程中,经常需要反复实现某种相同的数据处理,而其数据处理的触发机制却是多样化的,可能通过事件,也可能通过单击按钮。如图所示,该表为某公司2009年和2010
年的工资明细,制作了查询表,插入了两个按钮,通过单击这两个按钮分别查询2009年与2010年按部门汇总的工资表。

示例数据下载

https://download.csdn.net/download/ngbshzhn/20298070

代码

编写一个带有参数的汇总过程,以年份作为参数传递。为两个按钮分别编写代码,通过传递不同的年份实现不同的汇总。

Option Explicit
Sub sum2009()Call MySum(2009)
End SubSub sum2010()Call MySum(2010)
End SubSub MySum(iYear As Integer)Dim shtSum As Worksheet     '汇总表Dim shtData As Worksheet    '数据表Dim arrSum                  '汇总数组Dim arrData                 '数据数组Dim rowSum As Long          '汇总表行号Dim rowData As Long         '数据表行号Dim rowNew As Long          '汇总表总行数Dim colN As LongDim sDept As String         '部门Dim bln As Long             '查找标识变量Set shtData = Sheets("sheet1")Set shtSum = Sheets("sheet2")'数据数组赋值arrData = shtData.Range("A1").CurrentRegion.ValuerowNew = 0'汇总数组第一维下限与原始数组一致ReDim arrSum(Range("C1").Column To Range("P1").Column, 1 To 1)For rowData = 2 To UBound(arrData)If Year(arrData(rowData, UBound(arrData, 2))) = iYear ThensDept = arrData(rowData, 3)bln = TrueFor rowSum = LBound(arrSum, 2) To rowNewIf arrSum(3, rowSum) = sDept Thenbln = FalseExit ForEnd IfNext rowSumIf bln ThenrowNew = rowNew + 1rowSum = rowNewReDim Preserve arrSum(LBound(arrSum) To UBound(arrSum), 1 To rowNew)arrSum(3, rowNew) = sDeptEnd IfFor colN = 4 To UBound(arrSum)arrSum(colN, rowSum) = arrSum(colN, rowSum) + arrData(rowData, colN)Next colNEnd IfNext rowDataWith shtSum.Range("A3:N" & .Rows.Count).Clear.Range("A3").Resize(UBound(arrSum, 2), .Range("N1").Column).Value = WorksheetFunction.Transpose(arrSum)End With
End Sub

使用含有参数的过程供多个过程调用

当声明了含有参数的过程后,该过程在被不同的过程调用时,可以根据参数设置的不同而进行不同的操作。如本例两个程序需要对两个年份的数据分别进行汇总,其汇总方法均一致,
仅是汇总条件上的不同。因而若能将该汇总的过程声明为一个含有参数的过程,并通过参数传递调用该过程,则可以在调用过程中随意指定所需汇总的年份。
    带有参数的过程的调用与使用系统内置函数或者方法一致,一般可以采使用两种方式:直接调用和使用Call调用。以本例为例,若过程名为SumTotal,其含有一个表示年份的参数,则调用其汇总2009年数据可以采用以下两种形式:

SumTotal 2009

或者

Call SumTotal(2009)

其中,2009是向SumTotal传递的参数。当调用含有参数的过程时,应遵循以下规则:

  • 当直接调用过程时,则参数写在过程名之后,与过程名中间相隔一个空格;当使用Call语句调用过程时,参数写在过程名之后的一对括号中。
  • 当有多个参数时,各个参数以逗号隔开。
  • 当参数的书写顺序与原过程声明时的声明顺序不一致时,使用以下方式传递参数值:

参数名:=参数值

含有参数的过程的声明方法

声明一个带有参数的过程与声明一个普通的过程语法一致。声明时,需要在过程名之后的括号中加入参数列表,其语法为

Sub subname([(arglist)]

其中,arglist为参数列表,在Excel VBA的过程中允许用户声明多个参数,其中各个参数之间以逗号(,)隔开。参数声明的语法如下:

[Optional] [ByVal|ByRef] [PararnArray] varname[()] [As type][=defaul tvalue]

关键字Optional表示可选关键字,当使用该关键字声明参数时,则表示该参数可以省略。在省略关键字时,可以为其指定一个默认值。其中参数defaultvalue用以定义参数的默认值。若未定义默认值defaultvalue,则参数的默认值为其变量声明后的默认值。当省略Optional时,表示该参数为必填参数。所有的可选参数应放置于必选参数之后。
    关键字Byval和ByRef决定了参数传递的方式。ByVal表示按值传递,ByRef是按地址传递。若省略该组关键字,则默认为ByRef。
    关键字ParamArray表示声明数量不确定但具有相同性质的参数。当声明该类型的参数时,则必须将该声明放置于参数声明的最后,并且参数只能为一个类型为Variant的数组。然而当调用该过程时,该数组参数的各个元素之间可以以逗号隔开。
    varname表不参数的名称,As type结构表示为参数指定类型。
    以下各示例展示了各种不同情况的参数声明的方法:

‘声明一个无参数传递的过程
Sub Test()‘声明含有一个名为index,类型为整型的参数的过程,并且该参数可省略Sub Test (Optional index As Integer)’声明含有一个名为index,类型为整型的参数的过程,并且该参数不可省略
Sub Test (index As Integer)’声明含有两个参数的过程,且两个参数不可省略
Sub Test (index1 As  Integer,  index2 As Integer)'声明含有两个参数的过程,其中index1不可省略,index2可省略,当省略时其值为
Sub Test (index1 As  Integer,  Optional index2 As  Integer = 2)'声明含有数量不确定参数的过程,并且该过程至少有一个参数index1
Sub Test (index1 As  Integer,  ParamArray indexes ()  As Variant)'声明含有一个参数的过程,该参数按照ByVal的方式传递
Sub Test (ByVal index As  Integer)

编写含有参数的过程的方法

对初学者来说,编写一个含有参数的过程会遇到一些困难。而实际上,编写此类过程与编写不含有参数的过程是相同的,唯一的区别是将原本声明的变量写在了参数列表中。然而直接
声明一个含有参数的过程并编写代码,在调试代码时会发生一些困难。因而初学者可以采用以下步骤编写含有参数的过程:
(1)声明一个不含有任何参数的过程;
(2)在过程中声明变量,包括将来需要作为参数的变量,并给变量赋予初始值;
(3)编写程序代码,并完成测试;
(4)将需要作为参数的变量移至该过程声明的括号中;
(5)删除过程中所有该变量的声明以及初始化赋值。

使用Application. Run调用过程

Application. Run方法可以用来运行某个过程,其语法如下:

Application.Run(Macro[[[[,Arg1],Arg2],Arg3], ……,Arg30])
  • 参数Macro为文本,表示某个过程的名称。
  • 参数Arg1至Arg30为需要传递的参数。

Application. Run方法的优点是可以用文本表示某个过程名,使用该方法来调用其他过程则相当于将过程名参数化。在一些较复杂的程序中,可能会建立过程的列表,此时就可以使用
Application. Run方法来调用列表中的程序。此外,该方法也可用于设置Excel工具栏中按钮的单击事件。

Excel 2010 VBA 入门 106 带参数的过程相关推荐

  1. Excel 2010 VBA 入门 057 Application.OnKey为过程设置快捷键

    示例 使用Application. OnKey为过程设置快捷键. Option ExplicitSub 为宏设置快捷键()Application.OnKey "+^K", &quo ...

  2. Excel 2010 VBA 入门 034 创建图片批注

    目录 批注(Comment)对象 批注的添加与删除 FiIIFormat对象 OnError语句 示例: 批注(Comment)对象 Comment对象是单元格的一个属性,表示单元格的批注.Comme ...

  3. Excel 2010 VBA 入门 119 创建对话框的帮助文档

    目录 例 码 步骤1 ​ 步骤2 步骤3 步骤4 步骤5 步骤6 步骤7 步骤8 步骤9 步骤10 步骤11 步骤12 步骤13 步骤14 步骤15 CHM文件及HTML Help Workshop ...

  4. Excel 2010 VBA 入门 001显示开发工具选项卡

    目录 VBA简介 宏简介 显示"开发工具"选项卡 ​ VBA简介 Visual Basic for Application (VBA)是Visual Basic的一种宏语言,是依附 ...

  5. Excel 2010 VBA 入门 006 设置宏安全性

    目录 操作方法 步骤1单击"开发工具"选项卡中的"宏安全性"按钮,如图所示. ​ 步骤2在"信任中心"的"宏设置"选项中 ...

  6. Excel 2010 VBA 入门 064 按照关键字批量创建超链接

    目录 示例 实现代码 Hyperlink对象 创建超链接 删除超链接及访问超链接 创建超链接打开指定的宏代码 示例 如图所示,该表为某公司资产负债表以及关于报表的说明.为了方便阅读,现希望能够用VBA ...

  7. Excel 2010 VBA 入门 093 数据处理之建立数组

    目录 示例 代码 数组的基本概念 数组的声明 数组的赋值与数组数据的读取 Ubound和Lbound函数获取数组的上下限 ForEach---Next循环遍历数组的注意事项 计算程序运行的时间 数组处 ...

  8. Excel 2010 VBA 入门 098 导入Access数据库的数据

    示例 Access是微软Office组件的数据库软件,使用它可以进行简单的数据库软件的开发.但Access的图表功能和数据分析功能不如Excel强大,常用的做法可以将Access中的数据导入 Exce ...

  9. Excel 2010 VBA 入门 144 制作通用工具

    目录 题 步骤 1.添加功能区选项卡和按钮 2.设计程序界面并编写程序功能代码 3.编写安装程序 4.测试和运行 通用工具的主程序设计 使用加载宏制作通用工具 加载宏工具的安装 题 制作一个通用的工作 ...

最新文章

  1. 利用MLAI判定未知恶意程序——里面提到ssl恶意加密流检测使用N个payload CNN + 字节分布包长等特征综合判定...
  2. DonkeyID---php扩展-64位自增ID生成器
  3. CNN收购Beme视频分享APP 11个员工也将加入
  4. 机房系统(九)——【组合查询】
  5. freemarker 异常处理
  6. java matches方法
  7. FISCO BCOS 同态加密 实例
  8. wsl2 Ubuntu安装Anaconda3
  9. windows10安装NVIDIA显卡驱动+cuda10.0教程
  10. 计算机如何分割硬盘,电脑硬盘怎么分区 电脑硬盘分区方法大全
  11. qq说说时间轴php实现,QQ说说时间 qq说说时间轴
  12. nios自学笔记四:将sof和elf合并为JIC文件
  13. Apache——CVE-2021-41773
  14. matplotlib绘制直方图,饼图,散点图,气泡图,箱型图,雷达图
  15. js页面中实现加载更多功能
  16. oracle rfs进程过多,oracle 11g data guard 中RFS、MRP进程的说明
  17. Dbus启动问题 Failed to get D-Bus connection: Operation not permitted
  18. 2021-09-09【linux】丨shell使用for循环遍历文件/数组
  19. R语言ggplot画世界地图并根据条件给国家上色
  20. 【英语】-11月英语总结

热门文章

  1. 量子计算机时空穿越,科学界沸腾!俄美两国科学家竟让时光倒流,未来真能时空穿越?...
  2. echarts如何去除饼图指示线
  3. Linux网络编程常用api
  4. 2054年的公司10强
  5. 动手强化学习(十):Actor-Critic 算法
  6. 快乐地使用Kate编辑器进行开发(kate作为ide攻略)
  7. fake计算机英语,除了用Fake表达“假的”,这10个英语表达更高级!
  8. Follow My Heart
  9. 什么样的技术文章吸引人?
  10. IDEA的项目目录显示0% classes,0% lines covered的解决方法