以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  [求助]狐表中运行Excel表中宏的代码应怎样写?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=41196)

--  作者:hzcaqjf
--  发布时间:2013/10/13 20:25:00
--  [求助]狐表中运行Excel表中宏的代码应怎样写?
想在合并Excel表之前,在表中先运行录制好的宏代码,并保存该工作簿.这代码应怎样写?
Dim dlg As New OpenFileDialog
dlg.InitialDirectory = "E:\\"
dlg.Filter = "Excel文件|*.xls"
dlg.MultiSelect = True \'允许选择多个文件
If dlg.ShowDialog =DialogResult.OK Then
    For Each fl As String In dlg.FileNames
        Dim App As New MSExcel.Application
        Dim Wb As MSExcel.Workbook = App.WorkBooks.Open(""& fl & "") \'第一个Excel文件
        Dim Wd As MSExcel.Window = Wb.Windows(1)    \'表示当前工作簿窗口
        Dim Ws As MSExcel.WorkSheet = Wb.WorkSheets(1) \'第一个工作表
        App.Visible = True
       \'运行宏"Macro1"    这段代码应怎么写?
       \'保存文件
    Next
End If

用"Sub Macro1() "根本不行.
[此贴子已经被作者于2013-10-13 20:48:41编辑过]

--  作者:有点甜
--  发布时间:2013/10/13 20:56:00
--  

Dim oRunArgs(2) As object \'宏参数,第一个是宏名称
oRunArgs(0) = "宏的名称" \'必填,后面两个参数可以不填
oRunArgs(1) = 第一个参数 \'可以是任意类型
oRunArgs(2) = 第二个参数 

\'执行宏
Dim result = app.Gettype().InvokeMember("Run", System.Reflection.BindingFlags.Default Or System.Reflection.BindingFlags.InvokeMethod, Nothing, App, oRunArgs)
[此贴子已经被作者于2013-10-13 21:21:02编辑过]

--  作者:有点甜
--  发布时间:2013/10/13 20:57:00
--  
 参考资料


--  作者:hzcaqjf
--  发布时间:2013/10/13 21:15:00
--  
代码一点都看不懂,
先谢谢有点甜老师.
再慢慢参悟.

--  作者:逛逛
--  发布时间:2013/10/13 21:19:00
--  

 

App.run("Macro1")

 

 

 

 

 

 

来源于Application.run(函数名,参数1,····,参数30) as object

 


--  作者:有点甜
--  发布时间:2013/10/13 21:22:00
--  
 回复5楼,呵呵,原来这么简单……详细看了下代码,用反射似乎多此一举了。

 2楼代码写错了,现已改正,但不推荐。
[此贴子已经被作者于2013-10-13 21:23:19编辑过]

--  作者:hzcaqjf
--  发布时间:2013/10/13 22:03:00
--  

 加入以下代码:

App.run("Macro1")

提示,找不到宏"Macro1",这是为何?我明明录制了宏保存在个人宏工作簿.

 


--  作者:有点甜
--  发布时间:2013/10/13 22:14:00
--  
  我测试了一下,可以正常。我的Macro是写在模块上的。