excel2013激活工具使用(excel2016激活教程)
如我们的报告界面,当我们的界面继续往下进行,在第二个以及第三个按钮处我们要激活刚才打开的excel,这个按钮的代码该如何写呢?
1 用appactivate语句
利用appactivate语句激活excel是非简单的,我们看下面的按钮代码:
private sub commandbutton2_click()
appactivate “microsoft excel”
end sub
代码的截图:
代码讲解:我们先看看appactivate语句的语法:
语法:appactivate title [, wait]
参数title;是必须的,这是应用程序的名称,正如它显示在应用程序窗口的标题栏那样,或者它也可以是shell函数返回的任务id号码。注意,参数title要跟每个正运行的应用程序的标题字符串进行对比,如果没有精确的匹配,那么任何标题字符串里前面的字符和参数title一致的应用程序就会被激活。(例如,你要激活excel,那么title参数应该是”microsoft excel”,如果你写的是”microsoft”,那么激活的就也可能是word,powerpoint……)。
第二个参数wait是可选的,它是个布尔值(true或false),明确vb什么时候激活应用程序。如果在这里是false的话,该应用程序就立即会被激活,甚至被调应用程序并没有焦点。如果在wait参数处放置true的话,那么被调的应用程序就会等到它有了焦点,然后才会激活该应用程序。
例如,要激活word,你就得输入下列语句:appactivate “microsoft word”注意,应用程序名称用双引号引用起来。
也可以使用shell函数返回的数值作为语句appactivate的参数,例如:
sub mynz()
returnvalue = shell(“c:microsoft officeofficeword.exe”,1)
appactivate returnvalue
end sub
2 利用api函数
如本讲的内容,在word中使用代码自动化激活excel,其实,在我们写程序的时候,会发现,当运行某个活动应用程序时(如word),从这个运行程序的代码激活另外一个应用程序作为主窗口(如在word运行时激活excel窗口)对于用户来说是非常有用的。这时我们可以尝试使用上面的appactivate语句,但这要求事先知道要激活的窗口的标题。而且,从实际的表现看,appactivate有点给人不靠谱的感觉,有时工作,有时不工作(会提示:引发错误5,无效的过程调用)。所以,我给大家讲解下面的第二种方案就是调用api函数的方案。
我们可以使用几个简单的windows api函数完成同样的任务。api是直接调用组成windows的dll库文件的过程。可以使用api函数完成vba本身无法执行的操作。但是有一点值得注意。就是api没有vba代码的错误处理功能,如果使用无效参数调用api函数,可能会导致excel崩溃并丢失所有工作。api函数的使用应该非常谨慎。
以下代码将激活主excel窗口并将键盘焦点设置为excel中的活动工作表。我这里给出的代码在13版32位office中已经实测,在16版及64位ofiice或许不能完全得到你需要的效果,这一点要注意。当然为了保证代码应适用于其他的场合我给出的是通用的版本,可以将myclass的值从xlmain更改为其他应用程序的window类从而完成实际的需要。
option compare text ‘声明比较字符串数据时要使用的默认比较方法按text比较。
‘ window api 引用声明
private declare function bringwindowtotop lib “user32” (byval hwnd as long) as long
private declare function findwindow lib “user32” alias “findwindowa” ( _
byval lpclassname as string, _
byval lpwindowname as string) as long
private declare function setfocus lib “user32” (byval hwnd as long) as long
private sub commandbutton1_click()
dim res as long
dim xlhwnd as long
const myclass = “xlmain”
‘假如有多个excel运行,程序是无法判断是要激活哪一个excel的;
‘同时必须使用vbnullstring调用,而不是””的空字符串的调用在findwindow函数中两者有不同
xlhwnd = findwindow(lpclassname:=myclass, lpwindowname:=vbnullstring)
if xlhwnd > 0 then
‘设置活动窗口
res = bringwindowtotop(hwnd:=xlhwnd)
if res = 0 then
msgbox “置顶激活错误,错误代码: ” & cstr(err.lastdllerror)
else
setfocus hwnd:=xlhwnd
end if
else
msgbox “没有发现 excel被打开”
end if
end sub
代码截图:
代码讲解:上述代码在头部建立了引用api函数的声明,在代码中首先会查找excel程序,如果找到会将excel置顶。此程序将激活主excel程序,并获得焦点,注意:如果打开vba编辑器,此操作将无法正常工作。如果打开vba编辑器窗口,系统将设置焦点到那个窗口,而不是xlmain窗口。此代码可以激活任何应用程序,只需更改myclass到应用程序主窗口的类,这里我给大家一些常见的office应用程序常见的类:
excel 97、2000、2002、2003、2007、2013 为 xlmain
word 97、2000、2002、2003、2007、2013 为opusapp
access 2000、2002、2003、2007、2013 为omain
下面我们看看上述代码的详细讲解:
① const myclass = “xlmain”
获取主’excel应用程序窗口的窗口句柄(“xlmain”)。如果”正在运行excel的多个实例”,您无法控制将检索哪个实例的hwnd。
② xlhwnd = findwindow(lpclassname:=myclass, lpwindowname:=vbnullstring)
在调用’ findwindow时,你必须使用vbnullstring不是一个空字符串””,当调用api函数时,vbnullstring和空字符串””之间有区别。
③ bringwindowtotop(hwnd:=xlhwnd) 将应用程序置顶
函数语法: bringwindowtotop(hwnd hwnd);
函数功能:该函数将指定的窗口设置到z序的顶部。如果窗口为顶层窗口,则该窗口被激活;如果窗口为子窗口,则相应的*父窗口被激活。
参数:hwnd: 设置到z序的顶部的窗口句柄。
返回值:如果函数成功,返回值为非零;如果函数失败,返回值为零。若想获得更多错误信息,可以调用getlasterror函数。
④ findwindow用法
函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写。
函数语法:hwnd findwindow(lpctstr ipclassname,lpctstr ipwindowname);
参数:ipclassname :指向一个指定了类名的空结束字符串,或一个标识类名字符串的成员的指针。如果该参数为一个成员,则它必须为前次调用theglobafaddatom函数产生的全局成员。该成员为16位,必须位于ipclassname的低 16位,高位必须为 0。
ipwindowname:指向一个指定了窗口名(窗口标题)的空结束字符串。如果该参数为空,则为所有窗口全匹配。
返回值:如果函数成功,返回值为具有指定类名和窗口名的窗口句柄;如果函数失败,返回值为null。
这个函数有两个参数,第一个是要找的窗口的类,第二个是要找的窗口的标题。在搜索的时候不一定两者都知道,但至少要知道其中的一个。有的窗口的标题是比较容易得到的,如”计算器”,所以搜索时应使用标题进行搜索。但有的软件的标题不是固定的,如”记事本”,如果打开的文件不同,窗口标题也不同,这时使用窗口类搜索就比较方便。如果找到了满足条件的窗口,这个函数返回该窗口的句柄,否则返回0。
⑤关于句柄,句柄是整个windows编程的基础。一个句柄是指使用的一个唯一的整数值,即一个4字节(64位程序中为8字节)长的数值,来标识应用程序中的不同对象和同类中的不同的实例,诸如,一个窗口,按钮,图标,滚动条,输出设备,控件或者文件等。应用程序能够通过句柄访问相应的对象的信息,但是句柄不是指针,程序不能利用句柄来直接阅读文件中的信息。如果句柄不在i/o文件中,它是毫无用处的。 句柄是windows用来标志应用程序中建立的或是使用的唯一整数,windows大量使用了句柄来标识对象。
⑥ setfocus hwnd:=xlhwnd
设置焦点。
本节知识点回向:在本节中我们讲了如何做到在不同的应用程序间切换,主要利用了两种方案,一种是利用api函数,要查找到程序的局部然后置顶,一种是利用了appactivate,这两种方法在应用上要注意测试,对于前者要注意所用的office是否合适于这种应用,后者要注意应用的稳定性。本讲的知识点:
① appactivate 如何应用。
② findwindow 和 setfocus 如何应用。
③ 上述两种应用的优缺点分析。
④ 理解api函数声明与office版本的关系。
本节代码参考文件”001 在word中激活excel.docm”
在取代office新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非vba莫属!学习vba是个过程,也需要经历一种枯燥的感觉,如太白诗云:众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山。
“水善利万物而不争”,绵绵密密,微则无声,巨则汹涌。学习亦如此,知道什么是自己所需要的,不要蜷缩在一小块自认为天堂的世界里,待到暮年时再去做自欺欺人的言论。要努力提高自己,用一颗充满生机的心灵,把握现在,这才是进取。越是有意义的事情,困难会越多。愿力决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。茶,满也好,少也好,不要计较;浓也好,淡也好,其中自有值得品的味道。去感悟真实的时间,静下心,多学习,积累福报。而不是天天混日子,也不是天天熬日子。在后疫情更加严峻的存量残杀世界中,为自己的生存进行知识的储备,特别是新知识的储备。学习时微而无声,利用时则巨则汹涌。
vba是利用office实现自己小型办公自动化的有效手段,我记得20年前自己初学vba时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习vba的朋友重复我之前的经历,我根据自己多年vba实际利用经验,推出了六部vba专门教程。
第一套:vba代码解决方案 是vba中各个知识点的讲解,覆盖绝大多数的vba知识点,初学必备;
第二套:vba数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ado连接accdb和excel的方法和实例操作,适合中级人员的学习。
第三套:vba数组与字典解决方案 数组和字典是vba的精华,字典是vba代码水平提高的有效手段,值得深入的学习,是初级及中级人员代码精进的手段。
第四套:vba代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。
第五套:vba中类的解读和利用 这是一部高级教程,讲解类的虚无与肉身的度化,类的利用虽然较少,但仔细的学习可以促进自己vba理论的提高。
第六套教程:《vba信息获取与处理》,这是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、vba互联网数据抓取、vba延时操作,剪切板应用、split函数扩展、工作表信息与其他应用交互,fso对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。
学习的过程也是修心的过程,修一个平静的心。在代码的世界中,心平静了,心情好了,身体自然而然就好。心静则正,内心里没有那么多邪知邪见,也就没有那么多妄想。利人就是利己。这些教程也是为帮助大家起航,助上我自己之力,我的上述教程是我多的经验的传递,大家可以根据1,3,2,6,5或者是4,3,2,6,5的顺序逐渐深入的逐渐学习。
推荐阅读
-
Substance Painter 2019如何激活?Substance Painter 2019安装激活与使用教程
-
IntelliJ IDEA 2019.3安装激活破解使用教程
-
讯连科技 Screen Recorder 屏幕录像工具安装激活图文教程(含下载)
-
最新Windows10 ISO镜像激活秘钥推荐 附激活工具+使用方法
-
最新win1021H1最新激活秘钥推荐 附激活工具+使用教程
-
flashl转mp3工具ThunderSoft Flash to MP3 Converter安装及激活教程
-
JetBrains CLion 2019 for Win怎么安装使用?CLion2019激活版安装教程
-
.NET Reflector8.5怎么激活?.NET Reflector安装激活使用详细图文教程
-
临时专利申请工具PatentWizard pro安装及激活教程(附激活补丁)
-
win7激活工具激活Windows7系统使用方法