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无法进行异步无刷新上传.真真的感到别扭.所以就尝试这去处理了一下.主要分三个部分:上传 ...
随机推荐
- Android Gradle 编译错误Java finished with non-zero exit value 2
出现这个错误主要有两类错误 依赖包重复 方法数超过65K 针对第一种错误,可能是由于build.gradle里写了 compile fileTree(dir: 'libs', include: ['* ...
- BLE链路层状态机
BLE的Link层,应当是了解BLE需要首先熟悉的一部分,BLE的Controller部分主要都在围绕这一部分实现的.Link层的内容规定了BLE底层是怎么实现蓝牙设备之间的控制,数据传输等等的.Li ...
- 用httpPost对JSON发送和接收
HTTPPost发送JSON: private static final String APPLICATION_JSON = "application/json"; private ...
- (读书笔记)Asp.net Mvc 与WebForm 混合开发
根据项目实际需求,有时候会想在项目中实现Asp.net Mvc与Webform 混合开发,比如前台框架用MVC,后台框架用WebForm.其实要是实现也很简单,如下: (1)在MVC 中使用Webfo ...
- Selenium2学习-026-WebUI自动化实战实例-024-获取页面元素
非常简单的方法封装,就不啰嗦了,直接上码咯 ^_^ /** * Get element. It will be return null when there is not such element. ...
- <dependency>spring-webmvc</dependency>
Spring 4.2.0.RELEASE版本: <dependency> <groupId>org.springframework</groupId> <ar ...
- iOS ARC环境下dealloc的使用
众所周知,iOS开发的时候,使用ARC的话,dealloc函数是不需要实现的,写了反而会出错. 但有些特殊的情况,dealloc函数还是需要的. 比如,在画面关闭的时候,需要把ViewControll ...
- androidSDK配置环境变量
android的开发人员来说,首先要做的就是环境变量的配置.java是需要配置环境变量的.当然,安卓的环境变量需要我们配置adb的使用,将开发平台的两个工具包配置到环境变量里. 工具/原料 and ...
- 史上最全的iOS面试题及答案
迷途的羔羊--专为路痴量身打造的品牌.史上最精准的定位.想迷路都难!闪电更新中...敬请期待,欢迎提意见.下载地址:https://itunes.apple.com/us/app/mi-tu-de-g ...
- [CC]ccHObject
qCC_db中的ccHObject