功能区按钮调用Excel、PowerPoint、Word中的VBA宏:RunMacro
功能区按钮调用Excel、PowerPoint、Word中的VBA宏:RunMacro
众所周知,Excel、PPT、Word文档或加载宏文件中可以写很多过程和函数,调试的过程中当然可以按F8或F5直接在VBA环境中运行。
不过,当你开发完一个工具的时候,一定会想到这些过程的执行方式,普遍的做法是向工作表上放置表单控件,用户在工作表上点击按钮来执行宏。
另外的方式,就是利用CustomUI技术,制作一个扩展名为xlam的加载宏文件,通过Ribbon中的按钮来调用VBA宏。这种方式虽然美观了,但是存在的问题是只要开发一个工具,就得修改或新建一个加载宏文件,冗余操作很多。
我最近开发了一个RunMacro的COM加载项,当加载后用户点击功能区中的按钮就可以调用他写的VBA过程。
*注意:一般情况下COM加载项里植入的功能区按钮只能调用COM加载项项目中的过程,而不是VBA中的过程。
那下面就直接写使用方法了,看好了。
第一步当然是下载和安装了,下载地址为:RunMacro-Setup.zip,安装后产生如下文件:

其中,RunMacro.dll就是COM加载项本身,不用理他,Office三大组件会自动加载这个共用加载项。
另外,会看到还有3个XML文件,例如用记事本打开Excel.xml,显然这是一个定制功能区的XML代码,默认情况下有四个button,注意里面的每个onAction,用它来指代点击按钮调用哪一个VBA过程,红框中的部分,是不是一看就明白?

这个文件其他位置的编辑方法没什么两样,唯一注意的是就是onAction要写上VBA中确实存在的过程名称。当然你需要事先准备好的VBA代码了,假设你做了一个“上传工具.xlsm”,里面有个模块Module2,里面包含一个ABC过程。

那么它恰好对应于<button id="Button3" label="Button3" imageMso="C" size="large" onAction="上传工具.xlsm!Module2.ABC"/>
当你点击Button3这个按钮时,弹出一个“好棒呀”,这显然是VBA中的过程。

对于PowerPoint、Word,做法与Excel类似。效果如下:

点击四个按钮其中的一个,会弹出错误对话框,这是很正常的。因为,我打开的幻灯片是空白的,没有任何宏。你需要事先准备一下。
总结
在使用工具的过程中,我们需要做的有两点,一是把VBA开发的工具做好,过程名明确,宏名是什么,它的模块名是什么,文件名是什么。
二是根据VBA中的过程路径,来修改对应的XML文件中的onAction属性,我提供的模板仅仅是默认值,大家可以根据customUI的知识任意修改XML。
那么,RunMacro究竟带来了哪些好处呢?
1.用户不需要设计加载宏,也不需要开发COM加载项,只负责开发VBA部分即可。
2.根据VBA工程结构,修改对应XML文件,是不是太简单。
功能区按钮调用Excel、PowerPoint、Word中的VBA宏:RunMacro的更多相关文章
- [原创]Java调用PageOffice给Word中的Table赋值
Word中的table操作需要借助数据区域(DataRegion)实现的,要求数据区域完整的包含了整个Table的内容,这样才可以通过数据区域控制和操作table.因此,要想使用table,则必须在w ...
- 将Gridview中的数据出到excel或word中
在以下按钮单击事件中实现:private void btnMIME_Click(object sender, System.EventArgs e){dgShow.AllowPaging = fals ...
- 【128】Word中的VBA
通过查找关键字,然后删除整段文字的实现! Sub 删除查找含关键词的行() Dim KeyWord As String KeyWord = InputBox("请输入关键词(词长不限,中英均 ...
- [转载]Java给word中的table赋值
一.准备工作: 下载PageOffice for Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...
- [原创]Java给word中的table赋值
一.准备工作: 下载PageOffice for Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...
- Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享
Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑&qu ...
- C# 将excel表格嵌入到Word中
C# 将excel表格嵌入到Word中 继续开扒,今天要实现的是使用C#将excel表格嵌入到Word中这个功能,将word表格导入到excel中我已经写过了,如有需要可参考我之前的文章,在开始前还有 ...
- c# 调用EXCEL在VS上能正常运行,部署在IIS上不能实现,在VS中运行页面和发布之后在IIS中运行的区别
发现一篇文章,很好,解决了这个问题:感谢原博主!特此做个笔记. 地址:http://www.cnblogs.com/zhongxinWang/p/3275154.html 发布在IIS上的Web程序, ...
- 64位操作系统(Windows 2008 R2 X64)ASP.NET 调用32位Excel,word 出现401 – 未授权: 由于凭据无效,访问被拒绝。
先确保IIS设置正确,目录权限设置正确. 打开“IIS信息服务管理器”——>选择你发布的网站——>选择功能视图中的“身份验证”——>右键匿名身份验证,选择“编辑”,选择“特定用户“– ...
随机推荐
- [BJDCTF2020]Mark loves cat
0x00 知识点 GitHack读取源码 $$会导致变量覆盖漏洞 0x01解题 dirsearch扫描一下,发现/.git目录,用githack获取一下源码. <?php include 'fl ...
- Java查漏补缺(3)(面向对象相关)
Java查漏补缺(3) 继承·抽象类·接口·静态·权限 相关 this与super关键字 this的作用: 调用成员变量(可以用来区分局部变量和成员变量) 调用本类其他成员方法 调用构造方法(需要在方 ...
- STM32速度---网页讲解
1. ① USART串口,若最大波特率只需115.2k,那用2M的速度就够了,既省电也噪声小. ② I2C接口,若使用400k波特率,若想把余量留大些,可以选用10M的GPIO引脚速度. ③ SPI接 ...
- 进度3_家庭记账本App_Fragment使用SQLite实现简单存储及查询
AddFragment.java: package com.example.familybooks; import android.content.ContentValues; import andr ...
- pyecharts绘制地图可视化
pyecharts:官方文档 我们这里使用pyecharts模块进行绘图. pyecharts 项目包含了一系列的地理地图数据,这些数据或者已经内置,或者需要额外安装和加载,我们需要下载下面六个包. ...
- 最短路问题-- Dijkstra Choose the best route
Choose the best route Problem Description One day , Kiki wants to visit one of her friends. As she i ...
- Codeforces 405D 数学问题
真是脑残...擦 具体题解在这里 http://www.cnblogs.com/windysai/p/3619222.html 原本我为了防止两个数冲突,设置了好多判断,结果发现,如果两个数冲突,另外 ...
- Codeforces 400C 矩阵乘法 数学规律
今天下午Virtual了一套最近的CF题,第三题给TLE了,就跑过去上课了. 这题给定一个由二进制表示的矩阵,当询问3的时候,求矩阵的值,矩阵的值是所有第i行乘以第i列的值的总和,然后还有1 b是翻转 ...
- SPOJ 423 Assignments 状态DP
这个题目搁置了这么久,终于搞完了. 给n个人分配n个课程,已经告诉了你n个人对哪几门感兴趣,问最多有多少种分配方式 我刚开始都没找到这怎么还可以状态dp,哪来的状态转移,想用暴力DFS,果断TLE的妥 ...
- Ctrl +c 脚本中
#!/bin/bashsar -n DEV 1 111111111111111 >>1.txt & #实时网卡流量数据 sleep 3 && kill -2 ...