Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3885|回复: 2

[分享] 【烟花原创】VBA零基础之第93篇 Application对象(十一)

[复制链接]
发表于 2014-1-28 15:49 | 显示全部楼层 |阅读模式
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

评分

参与人数 1 +15 收起 理由
冠军欧洲2010 + 15 这大春节的,师傅还在原创哇。

查看全部评分

发表于 2014-1-28 19:24 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-18 13:41 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 13:39 , Processed in 0.111628 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表