精华内容
下载资源
问答
  • VBA函数传递参数方式

    万次阅读 2018-03-04 20:58:03
    VBA函数传递参数值时分为Byval(值传递)和Byref(地址传递),用法上,分别相当于C/C++的值传递使用方法和引用传递使用方法。在VBA中,参数传递的默认方式是Byref,因为本质想法是对于相同命名的参数,在系统中采用...

            VBA函数传递参数值时分为Byval(值传递)和Byref(地址传递),用法上,分别相当于C/C++的值传递使用方法和引用传递使用方法。在VBA中,参数传递的默认方式是Byref,因为本质想法是对于相同命名的参数,在系统中采用同一个数值。

    '获取非空行
    Function GetNotNullRow(ByVal iStartRow, ByRef iRow)
        Dim Rng As Range
        For Each Rng In Range("B" & iStartRow & ":" & "P" & 100)
        If Rng <> "" Then
            iRow = Rng.Row
            Exit For
        End If
        Next
    End Function
    '附件8
    Sub Annex8(strWorkbookName As String)
        Dim SourseBook As Workbook  '源工作簿
        Dim MainBook As Workbook  '主工作簿
        Dim strSheetName As String  '工作表名
        Dim iFoundRow As Integer '查找到数据的行
        Dim iMainBookStartRow As Integer  '主工作簿开始行
        Dim iKeyRow As Integer  '关键字行
        Dim strKeyRow As String  '关键字行的关键字符
        Set SourseBook = Workbooks(strWorkbookName)
        Set MainBook = Workbooks(strMainWorkbookName)
        strSheetName = "附件8"  '工作表名
        strKeyRow = "统计范围"  '关键字符
        
        Windows(strWorkbookName).Activate
        iKeyRow = ActiveWorkbook.Sheets(strSheetName).Range("A:A").Find(strKeyRow).Row
        Call GetNotNullRow(iKeyRow + 2 + 1, iFoundRow) '+2因为开始行关键字为三和一合并单元格,+1下一行开始
        Windows(strMainWorkbookName).Activate
        iMainBookStartRow = ActiveWorkbook.Sheets(strSheetName).Range("A65535").End(xlUp).Row + 1   '+1下一行开始
        If iMainBookStartRow - 1 = iKeyRow Then
            iMainBookStartRow = iMainBookStartRow + 2  '开始行关键字为三和一合并单元格,第一次添加数据需+2
        End If
        SourseBook.Sheets(strSheetName).Rows(iFoundRow).Copy MainBook.Sheets(strSheetName).Range("A" & iMainBookStartRow)
    End Sub '从一个工作簿拷贝到另一个工作簿



    展开全文
  • VBA 中,调用子过程或函数时,我们可以为它们传递参数。提供的参数可以在子过程或函数内部使用,让程序更动态和灵活。传递参数的前提是,先在子过程或函数定义阶段设置参数,后在调用时按正确的方式提供实际参数值。...

    VBA 中,调用子过程或函数时,我们可以为它们传递参数。提供的参数可以在子过程或函数内部使用,让程序更动态和灵活。传递参数的前提是,先在子过程或函数定义阶段设置参数,后在调用时按正确的方式提供实际参数值。

    本篇教程主要介绍传递参数的基础部分,主要内容包括:

    带参数的子过程和函数的定义方法。

    调用子过程和函数时,参数的书写方式。

    可选参数的语法和实际用法。

    关于子过程和函数、它们的区别以及如何调用,请看前几篇内容。

    在子过程和函数中,传递参数的用法基本相同,本篇以子过程为例介绍参数的使用,函数中用法参考子过程。

    带参数的子过程定义方法

    子过程可以接受一个或多个参数,参数可以是常量、变量、表达式,并且每个参数指定其名称和数据类型。

    看实际的例子,以下代码定义了带两个参数的一个过程,过程名是 CustomLog ,参数分别是 num 和 base。此过程的用途是计算任意底数的对数,num 是计算对数的值,base 是底数。

    '声明一个带参数的子过程

    Sub CustomLog(num As Double, base As Integer)

    Debug.Print Log(num) / Log(base)

    End Sub

    子过程按照这种方法定义后,调用时,VBA 会提示需要提供什么参数以及参数类型。

    调用带参数的子过程

    调用带参数的过程,只需将参数按定义顺序书写即可,多个参数使用逗号分开。

    以上述过程为例,在一个主过程调用 CustomLog 子过程。

    '主入口

    Sub Main()

    CustomLog 100, 10

    End Sub

    除了按顺序书写参数外,也可以按任意顺序书写参数,但是这时需要给出参数名。带参数名的传递参数语法如下:

    [参数名]:=[实际参数值]

    参数名后写冒号等号(:=),再写需传递的参数值。看实际的例子,以下三种方式是等效的。

    '主入口

    Sub Main()

    CustomLog 100, 10 '方式一

    CustomLog num:=100, base:=10 '方式二

    CustomLog base:=10, num:=100 '方式三

    End Sub

    可选参数的用法

    实际开发中,有时子过程的参数可能不是必须的,我们希望根据参数有无情况,执行不同的操作。针对这种情况,VBA 提供了可选参数机制。

    可选参数语法

    可选参数在定义子过程时需要指定,方法是在参数名前添加 Optional 关键词。

    Optional [参数名] As [数据类型]

    还是以 CustomLog 子过程为例,我们把底数 base 设为可选参数。

    '声明一个带可选参数的子过程

    Sub CustomLog(num As Double, Optional base As Integer)

    '子过程代码

    End Sub

    调用时,VBA 会提示可选参数,参数放置在中括号中。

    设置可选参数的默认值

    可选参数定以后,如果在子过程中使用,需要判断参数有无提供。否则未提供而直接使用时,程序会出错。

    针对这种情况,VBA 提供了默认值机制,即可选参数未提供时,使用预算设置好的默认值。

    可选参数默认值,在定义过程时就设置,语法如下:

    Optional [参数名] As [数据类型] = [默认值]

    还是以 CustomLog 子过程为例,我们把底数 base 设为可选参数,并且默认值设为 10。

    '声明一个带可选参数的子过程

    Sub CustomLog(num As Double, Optional base As Integer = 10)

    Debug.Print Log(num) / Log(base)

    End Sub

    调用时,如果提供了 base 底数,则以提供的底数计算;如果未提供 base 底数,则以默认值 10 计算。

    '主入口

    Sub Main()

    CustomLog 100, 100 '返回 1

    CustomLog 100 '返回 2

    End Sub

    可选参数的位置

    当子过程有多个参数时,其中的可选参数需写在参数列表的末尾,否则 VBA 提示错误。

    可选参数错误顺序:

    可选参数的正确顺序:

    总结

    VBA 过程和函数均可以接受一个或多个参数。当调用它们时,需要注意传入的参数的书写顺序:不写参数名时,按照定义的顺序传递;写参数名时,对书写顺序没有要求。此外,过程和函数可以设置某一个参数是可选的,类似 VLOOKUP 函数的第四个参数,是否精确查找。当设置成可选时,还可以指定可选参数的默认值。

    展开全文
  • vba命令行传递参数

    2020-12-22 06:54:39
    每次通过单击 Excel 程序...再有执行VBA中的shell "excel.exe /参数*.xls"语句,实际也是一条命令行。通过向 Excel.exe 命令添加称为“开关”的子命令,可以更改程序启动方式的某些方面。开关的形式为主命令后加一个...

    每次通过单击 Excel 程序图标或“开始”菜单中的 Excel 程序名称启动 Excel  时,实际上就会运行 Excel.exe 命令,但通常不键入该命令,甚至看不到该命令。再有执行VBA中的shell "excel.exe    /参数  *.xls"语句,实际也是一条命令行。

    通过向 Excel.exe 命令添加称为“开关”的子命令,可以更改程序启动方式的某些方面。开关的形式为主命令后加一个空格,再跟斜杠 (/) 和开关的名称。开关有时还会后跟另一个空格以及一个或多个称为参数的特定指令,这些指令为程序提供有关如何执行 Excel.exe 命令的进一步信息。例如,以下命令指示 Excel 启动并以只读方式打开指定的文件:

    excel.exe /r "c:\My Folder\book1.xlsx"

    在此示例中,开关是 /r,参数是“c:\My Folder\book1.xlsx”。

    命令行开关也称为命令行选项,有时在使用参数时可以不带开关。如果只想一次性使用开关和任何关联的参数,则可以在 Microsoft Windows 的“运行”对话框(在“开始”菜单上)中键入命令。如果想多次使用同一开关及其关联的参数,则可以创建一个桌面快捷方式,以便始终使用同一开关及其参数启动程序。

    VBA命令行参数有什么作用?

    依在下的理解,除了上面提及的,还可以向VBA传递参数以决定程序的行为。大家都知道,我们可以使用open语句打开一个xls 文档,如果该xls文档存有vba,open语句是没办法向VBA传递命令行参数滴,VBA当然没选择的余地去执行。这里我要提到shell啦,传递的参数让VBA接收后视参数情况执行具体的代码。

    VBA又是如何接收命令行参数滴呢?

    command?或command$?对不起,那是VB的专利,VBA可不管这一套。亏得API这家伙偏喜欢管闲事,通过对API函数数据类型稍作修改后,我们可以做到接收命令行了,至于如何提取命令行中的参数,对懂字符串处理函数的都是小菜一碟了。闲话少说,下面略举例子示范命令行参数传递和接收的过程。

    有A.xls和B.xls,A模块中有一过程:shell"excel.exe   /123   B.xls",语句是说打开B文档并传递参数123.

    B.XLS有一sub过程(该过程可由app_open触发),声明及过程如下:

    Public Declare Function GetCommandLine Lib "kernel32" Alias "GetCommandLineA" () As Long

    Public Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As Long) As Long

    Public Declare Function lstrcpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As String, ByVal lpString2 As Long) As Long

    Function CommandLine() As String

    Dim length As Long, pstr As Long

    pstr = GetCommandLine()               '获取字符串的指针

    length = lstrlen(pstr)                '获取字符串的长度

    CommandLine = String(length + 1, 0)   '调整字符串的大小

    lstrcpy CommandLine, pstr             '复制字符串

    End Function

    sub test()

    sheet1.cells(1,1)= commandline

    end  sub

    我们可到工作表地址中查看该命令行,至于具体的VBA代码,可以根据接收到的参数选择执行对应的代码.比如代码是全自动执行,还是需要人工输入数据干预后执行,如此等等,大家看是否有用得着的地方.

    展开全文
  • vba 传递参数比较简单的方法

    千次阅读 2018-07-23 10:34:54
    刚刚写的那篇文章传递参数过程较复杂,这里写一个比较简单的:参考 形参 实参 a工作簿中: Public aa Sub Setaa(x) aa = x End Sub 另一个工作簿中: Run "'a.xls'!setaa(8)"''''''''''''将X=8赋值....

    刚刚写的那篇文章传递参数过程较复杂,这里写一个比较简单的:参考 形参 实参

    a工作簿中:
    Public aa
    Sub Setaa(x)
        aa = x
    End Sub

    另一个工作簿中:

    Run "'a.xls'!setaa(8)"''''''''''''将X=8赋值
    展开全文
  • VBA传递参数步骤

    2020-12-22 06:54:40
    然而,在现实生活中,过程(子程序和函数)经常需要参数参数(自变量)是过程工作时需要的一个或多个数值。参数通常输入在括号之间,多个参数用逗号分割开来。使用Excel有一阵了,你已经知道Excel内置函数根据你提供的...
  • ExcelVBA传递函数

    2020-06-04 19:46:08
    函数调用: Sub EnterText() Dim m As String, n As String, r As String m = InputBox("Enter your first name:") n = InputBox("Enter your last name:") r = JoinText(m, n) MsgBox r End Sub Function ...
  • VBA过程调用和参数传递

    千次阅读 2020-07-28 11:05:23
    之前在CSDN的blink发了个动态,大致意思是要认真学好VBA,以后做表什么的会方便快捷点。然后一些小伙伴就留言建议我学python,毕竟python是近两年冉冉升起的新星,VBA没有什么大的前途,学起来浪费时间。 然后昨天...
  • 如何实现VBA函数的可变参数传递

    万次阅读 2008-07-08 10:25:00
    请看下面函数参数的说明:[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type] [= defaultvalue] 部分 描述 Optional 可选的。表示参数不是必需的。如果使用了该选项,则 arglist 中的...
  • ExcelVBA函数.xlsm

    2020-06-04 19:54:44
    该文件为学习ExcelVBA过程中过于函数的运用以及书写,函数的具体参数调用,地址参数调用以及相应不同参数数量的可选择调用。主要用于相应的EXcel VBA博文系列的应用。
  • VBA call 带参数 传递 字符串案例

    千次阅读 2019-03-10 00:29:57
    背景:计划用VBA写一个xml文件(开发工具 源 不能满足需求)整个脚本要很多次写入动作,所以做一个子程序直接调用。 解读:1.定义公共变量 str xmlfile 为字符串2.定义I为数字(还未使用到) sub shishi赋值 <...
  • 怎么往SetTimer的回调函数传递参数
  • 7 回顾VBA调用方法或函数时,参数传递形式 和python的语法很像 不带参数名的调用,必须按次序,留出位置来 带参数的调用,可以不按次序 如果混用,带参数名的必须放在后面   8 总结 大原则 ...
  • 本章主要内容:创建自定义函数,创建带参数的过程,使用加载宏工具,小结。
  • vba 数组 数组参数

    千次阅读 2019-08-10 18:00:37
    关于赋值 我看了很多本书都没有看到这样子的,包括官方文档,所以我就写了下来。 sub a() dim a() dim c() ...a = array(1,2,3,4) '这里a后面的()可以给也可以不给 ...sub a(paramarray a() as variant) 'paramarray...
  • 当你大VBA程序得越来越大,要很好地维护这么多的代码行是很困难的。要让你的程序容易编写、理解和改变,你就应该使用...你再读下去,该过程将被分割成几个任务,以示范使用主过程,子过程和函数的概念。 Sub AboutU
  • 1 参数传递时的 byVal 和 byRef 区别的简单总结 只有变量有这个问题,常量怎么传递本身也不改变 byVal 只是传递值,其他引用到这个参数的 过程或函数,只操作此参数的值,而不改变这个参数本身 更安全 byRef ...
  • 看到了sub传递参数这里就犯迷糊了,书中举的例子看着挺简单的,原理也是那么个原理,可是本人还是一头雾水,莫名的就躁了,什么传址,传值,传旨的!咋回事,搞不懂啊! 百度真的好,一搞就知道。 翻了半天网页,瞅...
  • VB几种函数参数传递方法,Variant,数组,Optional,ParamArray  一) 过程的参数被缺省为具有 Variant 数据类型。  1)ByRef按 地址传递参数在 VB 中是缺省的  按地址传递参数后,过程返回的也是地址,函数中...
  • 那Access VBA如何 调用Shell 函数呢使用非常简单Shell "要执行命令的路径"例如要打开微软Word文档处理,可以使用如下的命令:Shell "C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE "但如何传递更多的参数...
  • vba中可以设置图形对象,菜单命令按钮的OnAction属性为指定的过程名,当单击图形对象或者菜单命令按钮时运行具体的代码。如下所示的代码将在单元格鼠标右键快捷菜单中新建一个名为“计算两数之和”的命令按钮,...
  • 1、子程序和函数   1)   如果过程适用于整个应用程序,则范围为公共,否则为私有 如果是静态变量,则过程在反复调用时,其内部变量值仍保持 调用这些过程的方法是 call 过程名 2)option Explicit语句表示 ...
  • vba常用函数详细介绍及示例

    千次阅读 2020-07-17 10:53:08
    返回将传递给指定数字的绝对值的相同类型的值。 语法 Abs(数字) 必需的_number_ 参数可以是任何有效的数值表达式。 如果 number 包含 Null,则返回 Null;如果它是未初始化的变量,则返回 0。 数字的绝对值是其...
  • VBA 函数 过程之间互相调用的技巧

    千次阅读 2020-01-03 18:22:28
    技巧是传递参数? 结束另一个程序可以用变量传递 dim x sub a() if x=0 then exit .. end sub sub b() x=0 end if http://www.excelpx.com/thread-167803-1-1.html
  • 某个变量当作函数参数传递后,函数内部修改了。到底这个变量是否受影响 变量: 变量的概念基本上和初中代数的方程变量是一致的,只是在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。 变量的...
  • 就是我们为什么要把一个函数的地址作为参数传递给另一个参数。要知道在C语言中,一个函数内部是可以直接调用其他函数的,既然可以直接调用,为什么还要用这么麻烦的办法去把函数当做参数来传递呢。下面我举个例子。 ...
  • 如何使用VBS调用VBA函数

    千次阅读 2020-05-05 22:42:58
    ・截取图片后,截图的图片置于最底层 :调用VBA函数pictureToBack ・Case中的的一些内容,自动截图,并保存到Evidence中 :调用VBA函数 getCaseInfoAsPicture ■VBA的代码 '把图片置于底层 Sub ...
  • Word VBA cannot pass a parameter to a sub in an OnAction statement. At least for the moment it's best to accept this. But here is what definitively runs with Word (2010): Create your command bar and ...
  • OpenForm(FormName, View, FilterName, Where...参数 名称 必选/可选 数据类型 说明 FormName 必选 Variant 字符串表达式 (字符串表达式:任一求值为一列连续字符的表达式。表达式的元素可以是:返回字符串或字...
  • VB之精彩编程参阅资料-如何在函数传递数量不定的参数
  • Byref:引用传递 Byval:值传递 vba中默认是Byref引用传递。 http://blog.sina.com.cn/s/blog_8654c87a0100xrb2.html 经常忘掉,这次要用文字的方式记下来,上面是用来参考的。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,088
精华内容 835
关键字:

vba函数参数传递