最新WPS办公软件学习教程_免费企业办公软件下载_金山WPS Office官网论坛

 找回密码
 
查看: 24292|回复: 92

[VBA/VBS教程] WPS COM加载项制作连载教程1

  [复制链接]

84

主题

59

听众

3088

积分

测试体验团员

系统分析师

Rank: 14Rank: 14Rank: 14Rank: 14

该用户从未签到

金币
984
威望
8204
帖子
842
精华
3

WPS粉丝团 技术分享团 解答支持团 测试体验团 重阳节勋章 技巧教程分享达人 最佳教程奖 优秀会员奖

发表于 2012-11-14 19:35 |显示全部楼层
分享到: 新浪微博 腾讯微博
本帖最后由 天远 于 2012-11-17 00:34 编辑 9 g1 h+ o) I# P
: I( g2 I: E- G
WPS 从2012版开始支持Ribbon界面,同时不再支持插件平台。这让很多优秀的插件与WPS无缘,真的很可惜。好在,WPS依然支持COM,我们还是可以利用此进行二次开发,为WPS添砖加瓦。. ~' o2 W% R! J) L; o
天远不才,利用此创建了一个开发项目——天远ET工具箱。借此机会,讲一讲制作的全过程吧。
9 d& h" L" `# Z: |6 e# ?& r6 b6 s9 j我的水平毕竟有限,文中难免有很多不当和错误的地方,请大家指正。
4 L; O( ^) Z) d2 n
3 c" m; }6 c# b6 e我们做好一个功能,目的是要让用户去使用,这个入口就是软件界面上的各种菜单,按钮之类。因此,天远先从这里讲起。  I; x- r& V9 y, T7 F
WPS 2012的Ribbon界面不再是经典界面中的菜单和工具栏体系,而是Ribbon界面独有的各种按钮。
/ J; V$ Y- H: D& X0 U我们的开发可以有两种方式:
' K/ K- W1 T& f0 J1.基于菜单和工具栏体系9 U" s  F4 R; q
2.基于Ribbon界面
9 \( s! q& T" c( ]
# p, Y" [* f4 \3 R+ l很遗憾,天远虽然在Office 2010上对两种开发方式都比较熟,但对于WPS,只能用第一种方式。
" D3 a3 J2 D7 ]7 p" x, {& J7 o原因可能是WPS本身不支持,也可能是WPS支持,而我还没有找到方法。
6 @. H5 ?% d* F, E
  C. l! J% v$ T- Q2 z" S$ \, u1 N好吧,那我就讲讲我会的,第一种方式,毕竟,第一种方式可以用于两种界面,而后一种方式只能用于新界面,以我的理解,第一种方式的兼容性更好。+ R; v' {  x2 _4 q" c/ [

1 Z3 J4 @  t4 V0 ]WPS支持二次开发自定义菜单和工具栏(对于Ribbon界面将出现在加载项选项卡中)% Y  z4 L8 C2 s3 d
首先,我们来认识WPS的工具栏。这是文字、表格、演示共有的,在WPS的三个开发文档中找不到。因此我只能参考微软Office的(相关文档下载),好在,大部分都通用。- Y( C) }+ J/ N' i
' F/ Z% n; T# f, J& ?7 p5 d1 x; y8 p
下面以一个VBA过程为例子来讲解创建工具栏,弹出菜单,按钮' w4 F- u! W* I' s, A$ f; z
(为了方便,这里以给示例源代码加注释的形式讲解). E4 v/ Q! G3 D4 i8 J
01 Public Sub 创建工具栏弹出菜单按钮()
5 R$ |2 C( u% _02 On Error Resume Next '防错处理" C- I4 |5 p3 Z
03 'WPS的工具栏对象为 KSO.CommandBar(代表一个工具栏)
$ l! Y" L2 M/ R# b1 I1 y6 o04 'WPS的工具栏集合为 KSO.CommandBars(代表所有的工具栏)0 c7 j7 l2 V9 ~: G
05 '我们可以用KSO.CommandBars提供的Add方法创建一个工具栏,如
5 T4 v5 d0 ^7 K' c+ Y06 Dim myComBar As KSO.CommandBar '定义一个工具栏对象
: l) E5 L2 Q4 j. Y; g& I& i  J07 Application.CommandBars("我的自定义工具栏").Delete  '一般我们创建新工具栏前要把可能存在的同名工具栏删除2 X, @! @% z2 v- J" I! n
08 Set myComBar = Application.CommandBars.Add("我的自定义工具栏", ksoBarTop, , True) '创建一个工具栏& M( u! q  i: ~7 q3 p
09 'Add方法的四个参数是:工具栏名称,位置,是否以新命令栏替换活动菜单栏,是否是临时命令栏,一般除了第一个名称外,其他三个参数如上设置即可
" }2 r0 r7 Z4 ~& T% G4 l/ @2 M! A" O10 5 |0 C9 q# m2 g+ Z
11 '好了,现在我们创建了一个工具栏,但是,工具栏只是一个容器,上面什么也没有,所以我们要在工具栏上创建按钮和弹出菜单:
' a$ Q8 ?. A+ c  N% t5 I12 Dim myPopup As KSO.CommandBarPopup '定义一个弹出菜单4 S' f' E, O: M. t' I
13 Dim myBtn As KSO.CommandBarButton '定义一个按钮
  a, Z0 Q) o! j14 Set myPopup = myComBar.Controls.Add(ksoControlPopup, , , , True) '创建一个弹出式菜单在工具栏myComBar上,注意加红部分
" O+ e9 S! z) M( v15 myPopup.Caption = "我是工具栏上的弹出菜单" '设定弹出菜单的Caption属性,它将显示在界面上
# B/ I; p/ v# y: K0 J" N, |* G5 }5 a16 Set myBtn = myComBar.Controls.Add(ksoControlButton, , , , True) '创建一个按钮在工具栏myComBar上,注意加红部分
3 U7 I& r  Y, Q0 L# n17 myBtn.Caption = "我是工具栏上的按钮" '设定按钮的Caption属性,它将显示在界面上
1 b1 c# K+ ^0 k8 R18 ! N9 T) A/ L' R8 y) x+ c0 p" P
19 '现在工具栏上已经有了一个弹出菜单和一个按钮,但弹出菜单上什么也没有,我们现在在弹出菜单上创建两个按钮:
9 B( w$ h+ w3 N7 g9 P20 Set myBtn = myPopup.Controls.Add(ksoControlButton, , , , True) '创建一个按钮在弹出菜单myPopup上,注意加红部分: D6 Y% v9 Z7 n2 K( z
21 myBtn.Caption = "我是弹出菜单上的按钮1"
! l, C, {& G3 E1 R9 r22 Set myBtn = myPopup.Controls.Add(ksoControlButton, , , , True) '创建一个按钮在弹出菜单myPopup上,注意加红部分
& d7 M* X1 p# E23 myBtn.Caption = "我是弹出菜单上的按钮2"
' e2 B* A+ I) {/ w- \24 ; i( B: S5 @" z2 o0 q8 x! |
25 myComBar.Visible = True '最后设置新创建的工具栏的Visible属性为True,让其可见0 `% O0 w7 ~' v
26 8 W$ e0 S5 ~$ H! w" Z
27 '现在有了上面的代码作为模板,你可以做以下几件事件0 u- e, w" O& d3 f; G, K" k8 Z
28 '1.创建一个或多个工具栏9 U8 x6 _8 o0 E$ l  |7 @! M7 w
29 '2.在工具栏上创建一个或多个弹出菜单和按钮
' M/ I/ g& h9 Q- ?1 m30 '3.在弹出菜单上再创建一个或多个按钮( _( V/ h0 D9 O# N' N# {
31 End Sub7 c; u' V! f& N3 b- o. }$ a; R
! _9 b! _7 c8 S2 S4 Y2 `2 |- a
效果图:! g1 F6 ^" @) G" k

, z" A0 r0 k2 |' Y& f' L" C; W- d" q; E# m& D
/ I4 f, w0 g8 ~2 j
( W% c& ^/ k/ t# {. L

& I( e1 j# f! W' d; [
0 H) J- L) Z" [, K$ d这是制作COM加载项的第一个步,因为无论我们要加入什么功能,总该有一个东西让用户去点吧。所以创建工具栏,弹出菜单和按钮是必不可少的。
6 Z0 Z3 R# K" @
/ }- h0 x4 ^" N: M* S4 A下面是本文用到的两个Add函数的具体说明
( e: s5 Y  Z5 g  j0 i  m1.新建一个工具栏并添加到工具栏集合。返回 CommandBar 对象。
$ {- _  j6 d: c/ mexpression.Add(Name, Position, MenuBar, Temporary)
- v* ?' h# ^2 R$ Hexpression   必需。该表达式返回一个 CommandBars 对象。$ u. L+ j6 i  t$ E) ?( n* O
1)Name  Variant 类型,可选。新工具栏的名称。如果忽略该参数,则为工具栏指定默认名称(例如 Custom 1)。' o7 d2 I; _4 L  L  g# V
2)Position  Variant 类型,可选。新工具栏的位置或类型。可以为下表所列的 KsoBarPosition 常量之一。
+ o0 K- d0 c% d! Q- i常量 说明   G9 n! Y+ b! S$ E& G6 p# \# K
ksoBarLeft、ksoBarTop、ksoBarRight 和 ksoBarBottom 指定新工具栏的左侧、顶部、右侧和底部坐标
0 c" O3 C$ t/ j# w8 k7 s5 mksoBarFloating 指定新工具栏不固定 ) w; O4 W. k* A2 c
ksoBarPopup 指定新工具栏为快捷菜单
/ G* T. c! `, \4 g8 HksoBarMenuBar 仅适用于 macintosh 机
* u/ L$ s9 ~; C' c8 X3)MenuBar  Variant 类型,可选。设置为 True 将以新工具栏替换活动菜单栏。默认值为 False。# f. q0 K* y2 w; p! q& O- {+ C
4)Temporary  Variant 类型,可选。设置为 True 将使新工具栏为临时工具栏。临时工具栏在关闭容器应用程序时删除。默认值为 False。
' l: Z: A7 q. c3 `5 I6 [; V6 |( W6 N0 @2.新建一个 CommandBarControl 对象并添加到指定工具栏上的控件集合。9 G! Y8 q2 E# P8 S5 Q& o# V
expression.Add(Type, Id, Parameter, Before, Temporary)
% c$ t  \; t! C; L3 pexpression   必需。该表达式返回一个 CommandBarControls 对象。
; D/ |) ]  }1 U3 |# _6 Y& B! I7 E1)Type  Variant 类型,可选。添加到指定工具栏的控件类型。可以为下列 KsoControlType 常量之一:ksoControlButton、ksoControlEdit、ksoControlDropdown、ksoControlComboBox 或 ksoControlPopup。
/ M8 P$ R" ?+ t# W! }2)Id  Variant 类型,可选。指定内置控件的整数。如果该参数为 1,或者忽略该参数,将在工具栏中添加一个空的指定类型的自定义控件。
: y8 G7 s+ R! P( }& Z8 ?3)Parameter  Variant 类型,可选。对于内置控件,该参数用于容器应用程序运行命令。对于自定义控件,可以使用该参数向 Visual Basic 过程传递信息,或用其存储控件信息(类似于第二个 Tag 属性值)。  g1 o  s5 a: D# O" f9 t
4)Before  Variant 类型,可选。表示新控件在工具栏上位置的数字。新控件将插入到该位置控件之前。如果忽略该参数,控件将添加到指定工具栏的末端。( m& a3 o) f5 C; l  Y( h. d
5)Temporary  Variant 类型,可选。设置为 True 将使新工具栏为临时工具栏。临时工具栏在关闭容器应用程序时删除。默认值为 False。
  P* I( c  s. Z8 O" C' m9 J9 S" C6 d/ x: U' k
最后,附上本文所用的文档(现在我们先用VBA做测试,等到了基础知识讲完之后再讲怎么用VB将代码封装成DLL)
! V" E) I0 k; y9 x- i2 V+ D! r/ H(使用本文档需要您的WPS拥有VBA环境,没有VBA环境的请到http://bbs.wps.cn/thread-22347925-1-1.html中下载安装。)2 \$ x$ V3 w! f8 `: C

; U( P7 s4 O7 ^% K( @3 }. j  E+ g; U' e3 c1 X
7 W" g  K/ M* I9 ]
6 q. a5 S$ E$ R
参考资料:. ?* o5 z6 D7 h! z
1、VBA环境及WPS和微软Office二次开发文档分享(汇总一下)
' k' u7 [3 n# U     http://bbs.wps.cn/thread-22347925-1-1.html2 o8 p4 L: a$ ?3 R3 y+ W
2、插件来了,WPS2012也可以用——天远ET工具箱
; z: f* C+ K+ K- Q. C8 a4 Y     http://bbs.wps.cn/thread-22349095-1-1.html
+ C- _: M  J& \6 X6 o7 X* j/ H3、以一个字符处理的例子演示如何在ET上创建工具栏和按钮
, g$ t, S8 l7 ]# [2 z" s+ E     http://bbs.wps.cn/thread-22349759-1-1.html
. z% a+ |, j1 C. |. b7 ?! Z$ j) q
7 H* c5 j/ s% l
: Z& ?. q) B9 b' h8 z

本帖子中包含更多资源

您需要 登录 才可以下载或查看,

已有 5 人评分威望 收起 理由
木偶251900 + 10 很给力!
zhouyiran1@126.com + 24 很给力!
user + 1 赞一个!
松风水月 + 20 赞一个!
weichao321 + 10 很给力!

总评分: 威望 + 65   查看全部评分

热爱分享和学习。希望WPS论坛越办越好,WPS软件越做越好。也希望能在这里交到更多志同道合的朋友。我的邮箱:ypr@yprnet.com
我在WPS论坛上的教程帖子合集: http://blog.yprnet.com/wps

87

主题

402

听众

8389

积分

LV.15

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

该用户从未签到

金币
2407
威望
14021
帖子
7002
精华
7

技术分享团 解答支持团 重阳节勋章 勤奋版主奖 最佳教程奖 活跃会员奖 优秀会员奖 乐于助人奖 技巧教程分享达人

发表于 2012-11-15 08:59 |显示全部楼层
天远兄依然给力,先顶再看!{:soso_e142:}
已经消失了,就不要再联系。
回复

使用道具 举报

19

主题

108

听众

5338

积分

技术分享团长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 5 天

[LV.2]偶尔看看I

金币
5316
威望
11825
帖子
2334
精华
1

WPS粉丝团 荣誉版主奖 活跃会员奖 技术分享团 解答支持团 重阳节勋章

发表于 2012-11-16 23:16 |显示全部楼层
感谢天远的贡献和分享,学习了!!{:soso_e179:}
回复

使用道具 举报

84

主题

59

听众

3088

积分

测试体验团员

系统分析师

Rank: 14Rank: 14Rank: 14Rank: 14

该用户从未签到

金币
984
威望
8204
帖子
842
精华
3

WPS粉丝团 技术分享团 解答支持团 测试体验团 重阳节勋章 技巧教程分享达人 最佳教程奖 优秀会员奖

发表于 2012-11-17 14:55 |显示全部楼层
松风水月 发表于 2012-11-16 23:16 9 C1 n" a& J: d8 R+ ~
感谢天远的贡献和分享,学习了!!
/ s+ n: p6 G8 l  V
希望能对大家有所帮助
回复

使用道具 举报

84

主题

59

听众

3088

积分

测试体验团员

系统分析师

Rank: 14Rank: 14Rank: 14Rank: 14

该用户从未签到

金币
984
威望
8204
帖子
842
精华
3

WPS粉丝团 技术分享团 解答支持团 测试体验团 重阳节勋章 技巧教程分享达人 最佳教程奖 优秀会员奖

发表于 2012-11-20 14:59 |显示全部楼层
帖子这么快就沉了
热爱分享和学习。希望WPS论坛越办越好,WPS软件越做越好。也希望能在这里交到更多志同道合的朋友。我的邮箱:ypr@yprnet.com
我在WPS论坛上的教程帖子合集: http://blog.yprnet.com/wps
回复

使用道具 举报

13

主题

9

听众

1459

积分

LV.7

Rank: 7Rank: 7Rank: 7

签到天数: 1 天

[LV.1]初来乍到

金币
456
威望
3277
帖子
721
精华
0
发表于 2012-11-23 13:08 |显示全部楼层
非常好,大家好才算真的好!
# j  E8 T1 M' r" M5 L6 nhhh
回复

使用道具 举报

0

主题

0

听众

23

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
33
帖子
27
精华
0
发表于 2012-12-6 14:36 |显示全部楼层
谢谢分享。
回复

使用道具 举报

2

主题

0

听众

13

积分

LV.1

Rank: 1

该用户从未签到

金币
1
威望
30
帖子
6
精华
0
发表于 2012-12-6 15:27 |显示全部楼层
东西太高端 看不懂

点评

松风水月  这个系列的教程是为要做WPS插件的人准备的,一般用户应该还用不到这功能~  详情 回复 发表于 2012-12-6 15:30
回复

使用道具 举报

19

主题

108

听众

5338

积分

技术分享团长

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

签到天数: 5 天

[LV.2]偶尔看看I

金币
5316
威望
11825
帖子
2334
精华
1

WPS粉丝团 荣誉版主奖 活跃会员奖 技术分享团 解答支持团 重阳节勋章

发表于 2012-12-6 15:30 |显示全部楼层
Alexia 发表于 2012-12-6 15:27
3 y9 Y! Y4 ^1 v+ L东西太高端 看不懂
* ~: ~3 o! x8 w9 r- K
这个系列的教程是为要做WPS插件的人准备的,一般用户应该还用不到这功能~{:soso_e128:}
回复

使用道具 举报

0

主题

0

听众

23

积分

LV.1

Rank: 1

该用户从未签到

金币
0
威望
33
帖子
27
精华
0
发表于 2012-12-11 13:04 |显示全部楼层
谢谢分享。
回复

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 更多账号登录:

快速回帖:

fastpost

WPS论坛更新日志|WPS Office官方论坛     

GMT+8, 2017-11-25 09:44

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部