ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 29827|回复: 42

Application.Run 的参数传递示例,测试通过

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-12-12 23:17 | 显示全部楼层 |阅读模式
本帖已被收录到知识树中,索引项:Application对象
本帖最后由 liucqa 于 2013-10-11 10:45 编辑

Application.Run 的参数传递示例

工作簿1,在模块1中写代码:
Sub callrun()
    Dim x, y
    x = 2: y = 3
    Application.Run "test1", 4, 3
    Application.Run "'test1 " & x & "," & y & "'"
   
    Application.Run "工作簿2!test2", 1, 2
    Application.Run "工作簿2!test2", x, y
    Application.Run "工作簿2!sheet1.testSheet", 1, 2
    Application.Run "工作簿2!sheet1.testSheet", x, y

    Application.Run "'工作簿2'!test2", 1, 3
    Application.Run "'工作簿2'!test2", x, y
   
    Application.Run "'" & ThisWorkbook.Path & "\" & "工作簿2.xlsm'!test2", 1, 2
    Application.Run "'" & ThisWorkbook.Path & "\" & "工作簿2.xlsm'!sheet1.testSheet", x, y
End Sub

Sub test1(x, y)
    MsgBox x & y
End Sub

工作簿2,在模块1中写代码
Sub test2(x, y)
    MsgBox x & y
End Sub

工作簿2,在Sheet1中写代码
Sub testSheet(x, y)
    MsgBox x & y
End Sub

评分

3

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-13 15:37 | 显示全部楼层
本帖最后由 liucqa 于 2013-10-11 11:12 编辑

除了工作簿带路径的情况,需要用单引号括起来之外,其他的情况尽量不要用单引号。

上述例子中,第二种方式调用,是把过程参数写到了Run方法的Macro参数里面,适用性受限。

******************************************************************************************************

Application.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)
表达式   一个代表 Application 对象的变量。

参数
名称 必选/可选 数据类型 说明
Macro 可选 Variant 要运行的宏。它可以是具有宏名称的字符串、表示函数所在位置的 Range 对象,或者是一个已注册的 DLL (XLL) 函数的注册号。如果使用字符串,将在当前工作表的上下文中对该字符串求值。
Arg1-Arg30 可选 Variant 应传递给函数的参数。

返回值
Variant

说明
此方法不可使用命名参数,参数必须通过位置进行传递。
Run 方法返回被调用的宏返回的任何值。如果将对象作为参数传递给宏,该对象将转换为相应的值(通过对该对象应用 Value 属性)。这意味着不能用 Run 方法将对象传递给宏。

*****************************************************
判断Run返回值可以知道是否运行正确。
Sub test()
     ret = Application.Run("test1(1,2)")       '错误写法,会导致两次调用
     MsgBox CStr(ret)                                 'Error 2015
     ret = Application.Run("test1", 1, 2)      '正确写法
     MsgBox CStr(ret)
      ret = Application.Run("'test1  1, 2'")   '另一种写法
     MsgBox CStr(ret)
End Sub

Sub test1(x As Integer, y As Integer)
    a = x + y
    MsgBox a
End Sub
         

TA的精华主题

TA的得分主题

发表于 2011-12-13 16:06 | 显示全部楼层
请参考:
Application.Run "'" & ThisWorkbook.Path & "\" & "Book1.xls'!Macro1"

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-13 20:47 | 显示全部楼层
本帖最后由 liucqa 于 2011-12-13 21:12 编辑
zhaogang1960 发表于 2011-12-13 16:06
请参考:
Application.Run "'" & ThisWorkbook.Path & "\" & "Book1.xls'!Macro1"

如果我已经有了打开文件的workbook对象,假设是wb,调用wb.sheet1里面的宏Macro1

.run 如何写?

我试了   Application.Run "'" & wb.fullname &  "'!sheet1.Macro1"   不行

TA的精华主题

TA的得分主题

发表于 2011-12-13 21:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 excelhomeljch 于 2011-12-13 21:51 编辑

wb.sheet1里面的宏?
宏哪有分是哪个sheet的,除非是事件.

Application.Run   wb.name &  "'!Macro1"
即可

TA的精华主题

TA的得分主题

发表于 2011-12-13 21:57 | 显示全部楼层
liucqa 发表于 2011-12-13 21:52
写在sheet中的宏不能直接调用,一般用sheet1.micro1的方式。

你在sheet里面写个宏,然后在菜单里面选开 ...

的确是,那就简单,注意Sheet中首字母大写
Application.Run   wb.name &  "'!Sheet1.Macro1"

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-13 21:52 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
excelhomeljch 发表于 2011-12-13 21:39
wb.sheet1里面的宏?
宏哪有分是哪个sheet的,除非是事件.

写在sheet中的宏不能直接调用,一般用sheet1.micro1的方式。

你在sheet里面写个宏,然后在菜单里面选开发工具-宏,看看就明白了

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-12-13 22:07 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
excelhomeljch 发表于 2011-12-13 21:57
的确是,那就简单,注意Sheet中首字母大写
Application.Run   wb.name &  "'!Sheet1.Macro1"

试过了,不好用,语句如下

Application.Run "'" & objWB.FullName & "'!Sheet9.rebuildSummary"

TA的精华主题

TA的得分主题

发表于 2011-12-13 22:08 | 显示全部楼层
本帖最后由 zhaogang1960 于 2011-12-13 22:10 编辑
liucqa 发表于 2011-12-13 20:47
如果我已经有了打开文件的workbook对象,假设是wb,调用wb.sheet1里面的宏Macro1

.run 如何写?


Sub 宏1() 'b.xls不打开状态
    Application.Run "'" & ThisWorkbook.Path & "\" & "b.xls'!sheet1.Macro1"
End Sub

Sub 宏2()
    Dim wb As Workbook
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\b.xls")
    Application.Run "'" & wb.FullName & "'!sheet1.Macro1"
End Sub

Sub 宏3()
    Dim wb As Workbook
    Set wb = Workbooks.Open(ThisWorkbook.Path & "\b.xls")
    Application.Run "'" & wb.Name & "'!sheet1.Macro1"
End Sub

TA的精华主题

TA的得分主题

发表于 2011-12-13 22:09 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
liucqa 发表于 2011-12-13 22:07
试过了,不好用,语句如下

Application.Run "'" & objWB.FullName & "'!Sheet9.rebuildSummary"

不好用?方法是你选择的
为什么你还是用fullname?我的回答是name
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-18 13:36 , Processed in 0.051002 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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