分享

跟烟花入门VBA之93:Application对象(十一)

 fzchenwl 2015-04-01

 

Run 方法

 运行一个宏或者调用一个函数。

 该方法可用于运行用 Visual Basic Microsoft Excel 宏语言编写的宏,
 或者运行
DLL XLL 中的函数。

 语法:

  Run(Macro, Arg1, Arg2, Arg3, Arg4, Arg5,Arg6, Arg7, Arg8, Arg9, _
     Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, _
     Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, _
     Arg26, Arg27, Arg28,Arg29, Arg30)

   Macro要运行的宏名字(过程名)。


    它可以是具有宏名称的字符串、表示函数所在位置的 Range 对象,
    或者是一个已注册的
DLL (XLL) 函数的注册号。


   这里以运行VBA宏(跨工作簿调用)为例子讲解

   宏名称有两种形式:

    形式1:工作簿名!模块名.过程名

     被调用的过程名在其所在的工程内,名称不是唯一的

     也就是在不同的模块内有相同的过程名时,

     那么在调用时需要加上所在模块的模块名字。

    形式2:工作簿名!过程名

     被调用的过程名在其所在的工程内,名字是唯一的。


    另外,调用加载宏中的过程时可以不用加工作簿名,直接指定过程名即可。

    Run 过程名这种形式调用时,先会搜索本工作簿是否有指定的过程,
    然后再到加载宏中继续找,找不到就只有报错了。
    (如果是同一个工程内的,没必要用
run方法了,直接过程名就成了)


  所以大家在写过程时,同一个工程内尽是不要有两个或多个同名的过程(事件是个例外)。


  如果使用字符串,将在当前工作表的上下文中对该字符串求值。

  Arg1-Arg30 可选 Variant 应传递给函数的参数。

 返回值:Variant

 说明:

  此方法不可使用命名参数,参数必须通过位置进行传递。

  Run 方法返回被调用的宏返回的任何值。

  如果将对象作为参数传递给宏,该对象将转换为相应的值(通过对该对象应用 Value 属性)。
  这意味着不能用
Run 方法将对象传递给宏。

示例1

 准备工作:新建两个工作簿(假设分别为工作簿1,工作簿2

 在工作簿1中添加一标准模块,复制以下代码:

  Sub test()

   Application.Run '工作簿2!模块1.test1'

   '两个标准模块中均有test1过程,所以在调用时要指定模块名

   Application.Run '工作簿2!模块2.test1'

   '模块2test1过程有两个可选参数

   Application.Run '工作簿2!模块2.test1', '测试调用模块2test1过程', _

                 'Application.run方法演示'

   MsgBox '6*9=' & Application.Run('工作簿2!test2',6, 9)

   'test2过程名在工作簿2中具有唯一性,所以不需要加上模块名

   '另外,由于test2是个函数,有返回值,可以用在表达式中。

  End Sub



 在工作簿
2中添加两个标准模块。

 在模块1中复制如下代码:

  Sub test1()

   MsgBox '模块1'

  End Sub



 模块
2中复制以下代码

  Sub test1(Optional strPrompt As String ='测试显示内容',  _
       Optional strTitle As String = '测试标题')

   MsgBox prompt:=strPrompt, Buttons:=vbInformation + vbOKOnly,Title:=strTitle

  End Sub

 Function test2(a As Long, b As Long)

    test2 = a * b

 End Function


 准备工作完成后运行工作簿1中的test过程。



SendKeys 方法

 将击键发送给活动应用程序。

 语法:

   SendKeys(Keys, Wait)


    Keys 必选 Variant 要以文本形式发送给应用程序的键或组合键。

    Wait 可选,如果为 True,则 MicrosoftExcel 会等到处理完按键后将控件返回给宏;
         如果为
False(或者省略该参数),则继续运行宏而不等至处理完按键。

 说明:

  本方法将击键放到键盘缓冲区。某些情况下,在调用要使用击键的方法之前必须先调用此方法。
   例如,若要往对话框中发送密码,则必须在显示对话框之前调用
SendKeys 方法。

  Keys 参数可指定任何单个键或与 AltCtrl Shift 的组合键(或者这些键的组合)。
  每个键可用一个或多个字符表示。例如,
'a' 表示字符 a,或者 '{ENTER}' 表示 Enter

  若要指定那些没有屏幕回显该字符的键(例如,Enter Tab),请使用下表所列的代码来表示相应的键。
  表中的每个代码表示键盘上的一个对应键。

    BACKSPACE {BACKSPACE} {BS}

    Break {BREAK}

    Caps Lock {CAPSLOCK}

    Clear {CLEAR}

    Delete Del {DELETE} {DEL}

    向下键 {DOWN}

    End {END}

    Enter(数字小键盘) {ENTER}

    Enter ~(波形符)

    Esc {ESCAPE} {ESC}

    Help {HELP}

    Home {HOME}

    Ins {INSERT}

    向左键 {LEFT}

    Num Lock {NUMLOCK}

    PageDown {PGDN}

    PageUp {PGUP}

    Return {RETURN}

    向右键 {RIGHT}

    Scroll Lock {SCROLLLOCK}

    Tab {TAB}

    向上键 {UP}

    F1 F15 {F1} {F15}




  还可指定与 Shift / Ctrl / Alt 组合使用的键。
  若要指定与其他键组合使用的键,可使用下表。


  要组合的键在键代码之前添加

    Shift +(加号)

    Ctrl ^(插入符号)

    Alt %(百分号)

 示例:来自校长的公式引用转换代码。

  Sub changeyinyong()

   Dim mrg As Range

   If TypeName(Selection) = 'Range'Then

    For Each mrg In Selection

     SendKeys '{F2}'

     'F2键进入编辑状态

     SendKeys '+{home}'

     'shift+home组合键全选公式部分

     SendKeys '{F4}'

     'f4键转换

     SendKeys '{enter}'

     '跳出单元格编辑模式

    Next mrg

    MsgBox '单元格工作引用切换完成'

     End If

  End Sub



Volatile 方法

 用于将用户自定义函数标记为易失性函数,无论何时在工作表的任意单元格中进行计算时,
 易失性函数都必须重新进行计算。
 非易失性函数只在输入变量改变时才重新计算,若不用于计算工作表单元格的用户自定义函数中,则此方法无效。

语法:

 Volatile(Volatile)

 Volatile 可选 Variant 如果为 True,则将函数标记为易失性函数。

     如果为 False,则将函数标记为非易失性函数。

    默认值为 True

示例:

 Function mytime()
  Application.Volatile
  mytime = Format(Now, 'hh:mm:ss')
 End Function

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多