欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  新闻

excel2013激活工具使用(excel2016激活教程)

程序员文章站 2022-06-14 22:02:56
如我们的报告界面,当我们的界面继续往下进行,在第二个以及第三个按钮处我们要激活刚才打开的excel,这个按钮的代码该如何写呢?1 用appactivate语句利用appactivate语句激活exce...

如我们的报告界面,当我们的界面继续往下进行,在第二个以及第三个按钮处我们要激活刚才打开的excel,这个按钮的代码该如何写呢?

1 用appactivate语句

利用appactivate语句激活excel是非简单的,我们看下面的按钮代码:

private sub commandbutton2_click()

appactivate “microsoft excel”

end sub

代码的截图:

excel2013激活工具使用(excel2016激活教程)

代码讲解:我们先看看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

代码截图:

excel2013激活工具使用(excel2016激活教程)

代码讲解:上述代码在头部建立了引用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”

excel2013激活工具使用(excel2016激活教程)

在取代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的顺序逐渐深入的逐渐学习。

excel2013激活工具使用(excel2016激活教程)