(RPA学习)使用多线程点击 VBA 运行中的消息提示框

艺赛旗RPA全面免费下载中
点击下载
http://www.i-search.com.cn/index.html?from=line27

业务场景
使用 win32com 运行 Excel 中的宏运算(VBA),会遇到 VBA 运行的最后一步会弹出消息提示框,需点击这个消息提示框之后,VBA 才能运行结束,所以在运行 VBA 之后加入 Try 组件去点击时无法点击的,所以考虑使用多线程来实现。

流程代码
import ubpa.iautomation as iautomation
import threading
import pythoncom
import time
#点击消息提示框按钮
def cilck_ok():
while True:

Try异常

    try:
        # 鼠标点击
        iautomation.WinSearchDepth=2
        selectorJson = {"selector":[{"ControlType":"按钮","ControlTypeID":"0xC350","Index":"1"},
    {"ControlType":"对话框","ControlTypeID":"0xC370","Index":"1"}]}
        iautomation.do_click(win_class=r‘XLMAIN‘,win_name=r‘aaaa.xlsm - Excel‘,selector=selectorJson,button=r‘left‘,curson=r‘center‘,offsetX=0,offsetY=0,times=1,run_mode=r‘unctrl‘,waitfor=3)
        time.sleep(1)
        # Break中断
        break
    except Exception as e:

        pass
    finally:
        pass

#VBA运行代码
def run_vba(path):
‘‘‘
一定要添加pythoncom.CoInitialize()
一定要添加pythoncom.CoInitialize()
一定要添加pythoncom.CoInitialize()
重要的事情说三遍
‘‘‘
#CoInitialize是 Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象
pythoncom.CoInitialize()
#载入Excel
xlApp=win32com.client.Dispatch("Excel.Application")
#设置是否打开Excel
xlApp.Visible=True
#设置是否显示警告和消息框

原文地址:https://blog.51cto.com/14253212/2402651

时间: 2024-11-03 22:42:59

(RPA学习)使用多线程点击 VBA 运行中的消息提示框的相关文章

WM_CLOSE、WM_DESTROY、WM_QUIT学习总结(点击关闭按钮会触发WM_CLOSE消息,DestroyWindow API会触发WM_DESTROY和WM_NCDESTROY消息,MSDN上写的很清楚)

WM_CLOSE:关闭应用程序窗口 WM_DESTROY:关闭应用程序 WM_QUIT:关闭消息循环 只有关闭了消息循环,应用程序的进程才真正退出(在任务管理器里消失). win32应用程序的完整退出过程:点击窗口右上角的关闭按钮,发送WM_CLOSE消息.此消息处理中调用DestroyWindow函数,发送WM_DESTROY消息.此消息处理中调用PostQuitMessage(0)函数,发送WM_QUIT消息到消息队列中.GetMessage捕获到WM_QUIT,返回0,退出循环(应用程序真

Android基础TOP4_1:点击物理按钮弹出退出提示框

JAVA: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } //点击物理按钮时,执行退出提示 public boolean onKeyDown(int keyCode,KeyE

Dreamweaver 制作图片热点之后,点击热点部分会有个提示框,怎么去掉

可以这么写试试看<map name="Map"> <area shape="rect" coords="364,31,517,64" href="http://haoever.com" onFocus="this.blur()"> </map>

html加载与脚本运行中,由于html未完全加载而导致脚本找不到dom元素无法执行事件

问题: 如题,就是说alert后出现一个对话框,我没有点关闭,其他js文件或html会被加载吗,我遇到一个问题就是在页面加载时调用一个div的click事件,却没有被执行,但是在调用事件前面加上alert('xx'):运行后手动关闭提示框click事件就调用成功,为什么,也写了个sleep函数,但不论sleep多久click事件也不会被执行,那我要怎样才能自动调用这个click. 解决方法: 将代码包含在onload中,进行(window.onload())加载. 原理: 首先网页接你所编写的代

IOS学习笔记 -- 多线程

多线程1.多线程的原理 1>.同一时间,CPU只能处理1条线程,只有1条线程在工作(执行) 2>.多线程并发(同时)执行,其实是CPU快速地在多条线程之间调度(切换) 3>.如果CPU调度线程的时间足够快,就造成了多线程并发执行的假象如果线程非常非常多,会发生: 1>.CPU会在N多线程之间调度,CPU会累死,消耗大量的CPU资源 2>.每条线程被调度执行的频次会降低(线程的执行效率降低) 2.多线程的优缺点 1>.多线程的优点 能适当提高程序的执行效率 能适当提高资源

C#多线程学习(一) 多线程的相关概念

什么是进程?    当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?    线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数. 什么是多线程?    多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务. 多线程的好处:    可以提

C#多线程学习(一) 多线程的相关概念(转)

什么是进程?当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源.而一个进程又是由多个线程所组成的. 什么是线程?线程是程序中的一个执行流,每个线程都有自己的专有寄存器(栈指针.程序计数器等),但代码区是共享的,即不同的线程可以执行同样的函数. 什么是多线程?多线程是指程序中包含多个执行流,即在一个程序中可以同时运行多个不同的线程来执行不同的任务,也就是说允许单个程序创建多个并行执行的线程来完成各自的任务. 多线程的好处:可以提高CPU的利用率.在多线程程序中

Android学习---ListView的点击事件,simpleAdapter和arrayadapter,SimpleCursoAdapter的原理和使用

如题,本文将介绍 listview的点击事件,simpleAdapter和arrayadapter的原理和使用. 1.ListView的注册点击事件 //注册点击事件 personListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { /** * * @param parent 当前ListView * @param view 代表当前被点击的条目 * @param position 当前条目的位置 * @p

java学习-----jvm的内存分配及运行机制

VM运行时数据区域: 根据<Java虚拟机规范(第二版)>的规定,JVM包括下列几个运行时区域: 我们思考几个问题: 1.jVM是怎么运行的? 2.JVM运行时内存是怎么分配的? 3.我们写的java代码(类,对象,方法,常量,变量等等)最终存放在哪个区? VM运行时数据区域: 1.程序计数器(program Counter Register):   是一块较小的内存空间,它的作用可以看做是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的