Ruby操作VBA的注意事项和技巧(2):宏里调用和控制窗体以及窗体上的控件、不同workbook之间的宏互相调用
4.宏里调用并控制窗体以及窗体上的各种控件
1 Sub Criterion_Check() 2 If Workbooks.count = 0 Then '如果当前没有打开的工作薄的话需要发出警告 3 MsgBox "工作簿未创建,请先创建一个工作簿,或打开一个工作簿。" 4 Exit Sub 5 End If 6 CriterionCheckDlg.Show (vbModeless) '调用对话框进行规则检查,放到static_check函数下,在按钮CommandButtonOk的响应事件下调用该函数 CriterionCheckDlg.CommandButtonOk = True '哈哈,直接调用按钮事件原来就可以啦,直接设置窗体的CommandButtonOk属性设置为True,后面凡是调用这个Criterion_Check宏的都会自动触发按钮执行静态检查,无需再麻烦进行快捷键出发了,简直太棒了 7 End Sub
5.不同WorkBook之间宏的相互调用(基于Ruby里的Run方法只能调用系统宏和当前Excel自带宏的问题提出的解决方法)
1 excel.Run('CriterionCheck')#这个宏只能是当前操作的Excel里的宏,为了用一个workbook里的宏操作另一个workbook,应该在VBA里用切换活动窗口的形式,而且把前面的宏的操作设置为针对活动窗
别问我为神魔不能直接写一个宏供系统里工所有打开的Excel调用,公司里的Excel2007应该是做过改装的,没有那个可以存储自定义宏供所有Excel文件都可以调用的个人工作簿PERSONAL.XLSB。本来我写了一个名为内容为空的A.xlsm的文件存储了用于
部门业务的宏,但当在Ruby里用run方法调用的时候,处理的永远是宏所在的这个啥内容都没有的A.xlsm,,,简直快逼疯宝宝了...苦想两天,终于彻底解决了这个问题!!!解决步骤如下
(a):同时打开A.xlsm和业务需要处理的Excel文件(例如B.xlsm),在业务宏(含有各种规则)里设置B.xlsm为当前活动窗口
1 Dim i As Integer, str As String 2 i = Workbooks.count 3 i = i - 1 4 'MsgBox i 5 'For i = Workbooks.count To 1 Step -1 6 'str = Workbooks(i).Name 7 'MsgBox "第" & i & "个活动窗口名称为" & str 8 Workbooks(i).Activate '将要检查的表先打开,再打开含有静态检查宏的表,这个顺序是必要的,绝对不苛刻颠倒,要不会出很大问题!!
(b)在要调用业务宏之前,同样要先执行一遍上面的代码,然后就可以执行业务宏了,处理的即为自己想要处理的表格
1 Sub 切换工作簿() Dim i As Integer, str As String 2 i = Workbooks.count 3 i = i - 1 4 'MsgBox i 5 'For i = Workbooks.count To 1 Step -1 6 'str = Workbooks(i).Name 7 'MsgBox "第" & i & "个活动窗口名称为" & str 8 Workbooks(i).Activate 9 10 Criterion_Check’业务宏调用,处理的即为上面的Workbooks(i) 11 'Next i 12 13 End Sub
Ruby操作VBA的注意事项和技巧(2):宏里调用和控制窗体以及窗体上的控件、不同workbook之间的宏互相调用的更多相关文章
- Ruby操作VBA的注意事项和技巧(1):乱码、获取VBA活动和非活动窗口的名称与路径、文件路径的智能拼接与截取(写入日期)
1.VBA编辑器复制粘贴出来的代码乱码 解决方法:切换到中文输入模式再复制出来就行了 2.获取VBA活动和非活动窗口的名称与路径 Dim wbpath, filename As String ...
- 《手把手教你》系列技巧篇(三十八)-java+ selenium自动化测试-日历时间控件-下篇(详解教程)
1.简介 理想很丰满现实很骨感,在应用selenium实现web自动化时,经常会遇到处理日期控件点击问题,手工很简单,可以一个个点击日期控件选择需要的日期,但自动化执行过程中,完全复制手工这样的操作就 ...
- WinForm中新开一个线程操作 窗体上的控件(跨线程操作控件)
最近在做一个winform的小软件(抢票的...).登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是 ...
- 在C#中使用 SendMessage 实现操作外部其他程序上的控件教程
一.C#代码实现 本案例使用的是c# winform .NET Framework 4.7.2 首先我们声明一个寻找窗体的函数 [DllImport("User32.dll", E ...
- javascript控制子页面对父页面控件操作
//赋值 window.parent.document.getElementById("partyid_trade_edit").value = data.data.partyid ...
- C#多线程操作界面控件的解决方案(转)
C#中利用委托实现多线程跨线程操作 - 张小鱼 2010-10-22 08:38 在使用VS2005的时候,如果你从非创建这个控件的线程中访问这个控件或者操作这个控件的话就会抛出这个异常.这是微软为了 ...
- WebBrowser控件使用技巧分享
原文:WebBrowser控件使用技巧分享 在发布“淘宝登货员”时发现不少朋友对WebBrowser控件比较感兴趣,故在此分享一下使用心得. 首先分享一个WebBrowser的扩展类(此类所需的dll ...
- 《手把手教你》系列技巧篇(五十五)-java+ selenium自动化测试-上传文件-下篇(详细教程)
1.简介 在实际工作中,我们进行web自动化的时候,文件上传是很常见的操作,例如上传用户头像,上传身份证信息等.所以宏哥打算按上传文件的分类对其进行一下讲解和分享. 2.为什么selenium没有提供 ...
- mvc file控件无刷新异步上传操作
前言 上传文件应该是很常见必不可少的一个操作,网上也有很多提供的上传控件.今天遇到一个问题:input控件file无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下.主要分三个部分:上传 ...
随机推荐
- SQL代码创建表例子
create table class ( code ) primary Key, name ) ); create table student ( code ) primary Key, name ) ...
- 蓝牙HID协议笔记
1.概述 The Human Interface Device (HID)定义了蓝牙在人机接口设备中的协议.特征和使用规程.典型的应用包括蓝牙鼠标.蓝牙键盘.蓝牙游戏手柄等.该协议改编自USB ...
- centos apache安装和设置
分类: LINUX 安装方式:yum install httpdyum install mysql-serveryum install phpyum install php-mysql 一.WEB服务 ...
- c# ToString() 用法
string tempa = Convert.ToString(31, 2);//将10进制数31转换为2进制字符串. string strNums = int.Parse(tempa).ToStri ...
- C语言解析json类型数据
转自:http://buluzhai.iteye.com/blog/845404 首先感谢作者!! 我使用的是cJSON:http://sourceforge.net/projects/cjson ...
- Tomcat执行流程
- [LeetCode]题解(python):056-Merge Intervals
题目来源 https://leetcode.com/problems/merge-intervals/ Given a collection of intervals, merge all overl ...
- C#中jQuery Ajax实例(一)
目标:在aspx页面输入两参数,传到后台.cs代码,在无刷新显示到前台 下面是我的Ajax异步传值的第一个实例 1.前台html代码: <html xmlns="http://www. ...
- http://blog.csdn.net/foreverling/article/details/51385128
http://blog.csdn.net/foreverling/article/details/51385128
- http://blog.sina.com.cn/s/blog_705cc5dd01012ehb.html
http://blog.sina.com.cn/s/blog_705cc5dd01012ehb.html