VBA给Office添加任务窗格
开发背景
查阅微软官⽹说明,创建任务窗格恰恰VBA不包含在内,有的开发者为了创建该窗体需要转到或其它语⾔,需要学习⼤量知识。为了能解决该问题我们可以⽤VB6.0 或 C++中的MFC简单的创建⼀个ActiveX控件来分别给32-bit和64-bit的Office使⽤。
开发思路
做过任务窗格的开发者都知道,其实任务窗格是实现了微软公开的Office.ICustomTaskPaneConsumer接⼝公布的⼀个回调函数,当Office的加载项被加载时,Office会利⽤该接⼝的回调函数来创建⼀个这样的窗体,但我们需要提供对应版本的ActiveX控件。
可以封装⼀个加载项,创建这样的窗体延迟到VBA中来即可。
开发原理
ActiveX是⼀个标准的Com DLL,每个Com组件都有唯⼀的GUID,可以看成是⼀个⾝份证。且32位的Office只能加载32位的ActiveX,64位的只能加载64位的ActiveX。
第⼀步制作⼀个标准的Office插件,以Excel为例。
Implements Office.ICustomTaskPaneConsumer'该接⼝就是Office创建任务窗格的接⼝,
'当Dll被加载时,该接⼝的回调函数会被调⽤,然后⽤⼯程⽅法创建窗体。
Private Sub AddinInstance_OnConnection(ByVal Application As Object,ByVal ConnectMode _ConnectMode, _
ByVal AddInInst As Object, custom()As Variant)
'该回调函数时Dll加载时获取该Dll实例对象初始化⼯作。
End Sub
vba做excel窗体录入教程Private Sub ICustomTaskPaneConsumer_CTPFactoryAvailable(ByVal CTPFactoryInst As Office.ICT
PFactory)
'该⽅法是创建窗体的回调函数,然后将其延迟到VBA中去。
End Sub
对外公布Connect对象,⽤延迟的⽅式公布创建窗体的⽅法。
⽣成插件给Excel⽤。
开发实战
给Excel准备⼀个标准的ActiveX控件,最简单⽤VB6.0来⽣成⼀个,但只能给32位的Excel使⽤。
建⽴好后,修改成⾃⼰想要的名字,直接编译即可。
这就是我们需要的ActiveX控件。接下来编写VBA代码。查阅Excel对象模型可以很容易获取Addin-in⾃⾝对象。
上⾯VBA代码可以成功的创建⼀个窗体,⾸先拿到Addin,然后调⽤Connect对象的CreatePane⽅法,使其延迟到VBA中来。
如果要发布到客户机器,只要注册这2个Dll,然后注意名称的使⽤即可。如果要创建64位Excel的任务窗格请看我另外⼀篇⽂章,在VB6.0同样能实现。
虽然可以创建这样的窗体,但是不能可视化设计,但可以换⼀个思路,先创建这样的窗体,然后利⽤窗⼝⼦类化的技术,将任务窗格作为容器,将普通的VBA中窗体放进去,这样就有应⽤价值了。
有兴趣的朋友可以加:794568082互相交流学习。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论