功能区按钮调用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的更多相关文章

  1. [原创]Java调用PageOffice给Word中的Table赋值

    Word中的table操作需要借助数据区域(DataRegion)实现的,要求数据区域完整的包含了整个Table的内容,这样才可以通过数据区域控制和操作table.因此,要想使用table,则必须在w ...

  2. 将Gridview中的数据出到excel或word中

    在以下按钮单击事件中实现:private void btnMIME_Click(object sender, System.EventArgs e){dgShow.AllowPaging = fals ...

  3. 【128】Word中的VBA

    通过查找关键字,然后删除整段文字的实现! Sub 删除查找含关键词的行() Dim KeyWord As String KeyWord = InputBox("请输入关键词(词长不限,中英均 ...

  4. [转载]Java给word中的table赋值

    一.准备工作: 下载PageOffice for  Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...

  5. [原创]Java给word中的table赋值

    一.准备工作: 下载PageOffice for  Java:http://www.zhuozhengsoft.com/dowm/ 二. 实现方法: 要调用PageOffice操作Word中的tabl ...

  6. Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享

    Java解析OFFICE(word,excel,powerpoint)以及PDF的实现方案及开发中的点滴分享 在此,先分享下写此文前的经历与感受,我所有的感觉浓缩到一个字,那就是:"坑&qu ...

  7. C# 将excel表格嵌入到Word中

    C# 将excel表格嵌入到Word中 继续开扒,今天要实现的是使用C#将excel表格嵌入到Word中这个功能,将word表格导入到excel中我已经写过了,如有需要可参考我之前的文章,在开始前还有 ...

  8. c# 调用EXCEL在VS上能正常运行,部署在IIS上不能实现,在VS中运行页面和发布之后在IIS中运行的区别

    发现一篇文章,很好,解决了这个问题:感谢原博主!特此做个笔记. 地址:http://www.cnblogs.com/zhongxinWang/p/3275154.html 发布在IIS上的Web程序, ...

  9. 64位操作系统(Windows 2008 R2 X64)ASP.NET 调用32位Excel,word 出现401 – 未授权: 由于凭据无效,访问被拒绝。

    先确保IIS设置正确,目录权限设置正确. 打开“IIS信息服务管理器”——>选择你发布的网站——>选择功能视图中的“身份验证”——>右键匿名身份验证,选择“编辑”,选择“特定用户“– ...

随机推荐

  1. 浅谈ASCII 、ISO8859-1、GB2312、GBK、Unicode、UTF-8 的区别。

    浅谈ASCII .ISO8859-1.GB2312.GBK.Unicode.UTF-8 的区别. 首先,先科普一下什么是字符编码.字符是指一种语言中使用的基本实体,比如英文中的26个英文字母,标点符号 ...

  2. 高次同余方程 $BSGS$

    第一篇\(Blog\)... 还是决定把\(luogu\)上的那篇搬过来了. BSGS,又名北上广深 它可以用来求\(a^x \equiv b (mod \ n)\)这个同余方程的一个解,其中\(a, ...

  3. request和response的setCharacterEncoding()方法

    1.pageEncoding=”UTF-8”的作用是设置JSP编译成Servlet时使用的编码.2.contentType=”text/html;charset=UTF-8”的作用是指定服务器响应给浏 ...

  4. Codeforces Round #604 (Div. 2) 部分题解

    链接:http://codeforces.com/contest/1265 A. Beautiful String A string is called beautiful if no two con ...

  5. python3+Opencv 搭建环境和基本操作

    一.必备前提: Python3.5及以上版本.pip.windows环境 二.搭建opencv 该部分可以创建隔绝的Python环境来引入,参照virtualenv的使用 在目标的cmd窗口,依次输入 ...

  6. JavaEE--JNDI(上,简介)

    参考:https://blog.csdn.net/yan372397390/article/details/50450332 https://www.landui.com/help/show-6158 ...

  7. js 动态添加元素 删除元素逻辑

    js 动态添加元素 删除元素逻辑 var obox=document.getElementById("box"); oadd.onclick=function(){ var odi ...

  8. luogu P4219 [BJOI2014]大融合

    题解:原来LCT也能维护子树信息,我太Naive了 用LCT维护当前子树节点个数 具体做法维护siz[x]=当前Splay子树和指向当前Splay子树的虚边所代表的节点个数 auxsiz[x]=指向x ...

  9. 基于python的爬虫流程图(精简版)

    网址: https://www.processon.com/view/link/5e1148b8e4b07db4cfa9cf34 如果链接失效,请及时反馈(在评论区评论),博主会及时更新

  10. nodejs(16)使用express.static快速托管静态资源

    const express = require('express') const app = express() // 步骤的拆解 const result = express.static('./v ...