题目要求:
列表取得WORD所有工具栏及其一级控件的名称,ID,和FACEID图片.
说明:这是一个全面考虑WORD VBA的题目,由于相对比较复杂(其实大概在50行代码左右),因此,我们将分步给分:
要求如下,在一个空白文档中,设置页眉文本为"Word工具栏/命令列表",段落对齐居中,字体为16号加粗;页脚为"第 X 页 共 X 页",段落对齐为右对齐,其中X Y 分别为页码域和页数域;此为1分;
在正文中,要求在WORD的工具栏中循环,并取得所有工具栏的所有一级控件名称,ID号和FACEID图片.工具栏和控件命令均需列表计数,其中工具栏对应段落为加粗字体,无缩进;控件命令所在段落为左缩进1厘米,并分别设有三个制表位,它们的位置为2.5厘米,11厘米和14厘米,字体格式不加粗.凡正确得出控件名和ID\FACEID者得2分,制表位正确设置者再得1分;
优胜者最高为5分.
分步完成者按上述中分别给予.
结果见附件.
Option Explicit Sub ControlsList() Dim OldSet As WdWrapTypeMerged, EndRange As Range Dim oCommandBar As CommandBar, oControl As CommandBarControl Application.ScreenUpdating = False '关闭屏幕更新 OldSet = Word.Options.PictureWrapType '取得原有插入/粘贴图片时环绕方式 Word.Options.PictureWrapType = wdWrapMergeInline '设置为嵌入式 With ActiveDocument With .Sections(1).Headers(wdHeaderFooterPrimary).Range '页眉中 .text = "Word工具栏/命令列表" .ParagraphFormat.Alignment = wdAlignParagraphCenter '居中 .Font.Size = 16 '16号字体 .Font.Bold = True '粗体 End With With .Sections(1).Footers(wdHeaderFooterPrimary) '页脚中 NormalTemplate.AutoTextEntries("第 X 页 共 Y 页").Insert Where:=.Range '自动图文集 .Range.ParagraphFormat.Alignment = wdAlignParagraphRight '居右 End With With .Content '设置三个制表位:2.5厘米,11厘米,14厘米 .Paragraphs.TabStops.Add Word.CentimetersToPoints(2.5) .Paragraphs.TabStops.Add Word.CentimetersToPoints(11) .Paragraphs.TabStops.Add Word.CentimetersToPoints(14) For Each oCommandBar In Word.CommandBars '在命令栏中循环 .Paragraphs.Last.LeftIndent = 0 '无左缩进 .Paragraphs.Last.Range.Bold = True '最后一个段落为粗体 .InsertAfter oCommandBar.Index & ". " & oCommandBar.Name & Chr(13) '插入命令栏索引号和名称并增加一个段落 For Each oControl In oCommandBar.Controls .Paragraphs.Last.Range.Bold = False '非加粗 .Paragraphs.Last.LeftIndent = Word.CentimetersToPoints(1) '左缩进1厘米 .InsertAfter oCommandBar.Index & "." & oControl.Index & vbTab & oControl.Caption & vbTab & "ID:=" & oControl.ID & vbTab & Chr(13) If oControl.Type = msoControlButton Then '如果为msoControlButton则复制FACEID oControl.CopyFace Set EndRange = ActiveDocument.Range(.End - 2, .End - 2) '定义一个RANGE对象,始终是文档结束标记的前二个字符位置,即最后第二段落标记前一个字符位置 EndRange.Paste '粘贴 End If Next Next End With End With Application.ScreenUpdating = True '恢复屏幕更新 Word.Options.PictureWrapType = OldSet '恢复用户原来的设置 End Sub '----------------------
这次题目看似比较简单,当时的出发点就是:
1. 熟悉工具栏\控件对象,正确地应用其属性与方法;
2. 学习WORD中自动图文集的使用;
3. 学习WORD中制表位的设置,制表位具有继承性,如果我们在某一段设置了制表位,则其下一段落中,如果使用制表位,其位置将继承上一段落中的制表位位置.
4. 学习WORD中RANGE对象的使用;
5. 可以进行条件判断也可以进行错误处理时的错误捕捉代码的写法.
总结:
1. 绝大多数网友对于WORD还不是特别熟悉,所以,对于其选项中的一些设置可能有所忽略,那就是如果用户的工具/选项/编辑:图片插入/粘贴方式中,如果不是嵌入型,则图片的位置就会不符合要求了.
2. 对于RANGE对象的正确运用非常重要,它可以避免重复地使用SELECTION对象,从而加快程序运行和代码的紧凑性,合理性。
[此贴子已经被作者于2005-12-1 12:11:11编辑过] |