《中文Word2000 高级教程》
' 完成某操作。
Else ' 用户按下“否”。 End If
通过对事件的引用,就大大增强了Word 窗体的交互性。当用户在文字框输入“笑嘻嘻”后转移焦点时,会显示如图12-10 所示的【你的姓名是:】对话框,当单击【关闭文档】按钮时,会显示【确认关闭文档】对话框,如图12-10 所示。用户单击【是】按钮,将关闭该文档,如果窗体还没有保存,会提示用户保存窗体;单击【否】按钮,将返回文档。
图12-10 响应用户的操作事件
? 12.6 利用VBA 处理表格
表格功能是Word 一个非常重要的功能,也是用户经常使用的一项功能,在Word 2000 中,增加了不少新的功能。如果利用VBA 自动处理表格将使用户的效率有极大的提高。
? 12.6.1 向表格单元格插入文字
下面的代码向活动文档的第一个表格的第一个单元格插入文字。Cell 方法返回单个的Cell 对象。Range 属性返回一个Range 对象。Delete 方法用来删除现有的文字,而InsertAfter 方法用来插入\文字。
If ActiveDocument.Tables.Count >= 1 Then
With ActiveDocument.Tables (1) .Cell ( Row:=1,Column:=1).Range .Delete.InsertAfter Text:=\End With End If
? 12.6.2 在表格中插入文字
下面的代码在文档的开头插入一张3 行4 列的表格。For Each...Next 结构用来循环遍历表格中的每个单元格。在For Each...Next 结构中,InsertAfter 方法用来向表格单元格(Cell 1、Cell 2 等等)添加文字。
Set oDoc = ActiveDocument Set oTable=oDoc.Tables.Add(Range:=oDoc.Range(Start:=0,End:=0),NumRows:=3, NumColumns:=4) iCount = 1
For Each oCell In oTable.Range.Cells oCell.Range.InsertAfter \iCount = iCount + 1 Next oCell
oTable.AutoFormat Format:=wdTableFormatColorful2,ApplyBorders:=True, ApplyFont:=True,ApplyColor:=True
? 12.6.3 显示每个单元格的内容
下面的代码返回并显示文档第一张表格第一行中每个单元格中的内容。 Set oTable = ActiveDocument.Tables(1)
第 16 页 共 18 页
《中文Word2000 高级教程》
For Each aCell In oTable.Rows(1).Cells
Set myRange = ActiveDocument.Range(Start:=aCell.Range.Start,End:=aCell.Range.End - 1) MsgBox myRange.Text Next aCell
Set oTable = ActiveDocument.Tables(1) For Each aCell In oTable.Rows(1).Cells Set myRange = aCell.Range
myRange.MoveEnd Unit:=wdCharacter, Count:=-1 MsgBox myRange.Text Next aCell
? 12.6.4 将文本转换为表格
下面的代码在活动文档的开头插入以制表符分隔的文本,然后将这些文本转换为一张表格。 Set oRange1 = ActiveDocument.Range(Start:=0, End:=0)
oRange1.InsertBefore \
Set oTable1 = oRange1.ConvertToTable(Separator:=Chr(9), NumRows:=1, NumColumns:=3)
? 12.6.5 返回每个表格单元格的内容
下面的代码定义一个数组,使该数组的元素个数等于文档第一个表格中的单元格数(假定Option Base 1)。For Each...Next 结构用来返回每个表格单元格的内容,并将文字指定给相应的数组元素。
If ActiveDocument.Tables.Count >= 1 Then Set oTable = ActiveDocument.Tables(1) iNumCells = oTable.Range.Cells.Count ReDim aCells(iNumCells)i = 1
For Each oCell In oTable.Range.Cells Set myRange = oCell.Range
myRange.MoveEnd Unit:=wdCharacter, Count:=-1 aCells(i) = myRange.Text i = i + 1 Next oCell End If
? 12.6.6 将活动文档中的所有表格复制到一篇新文档
下面的代码将当前文档中的表格复制到新文档中。 If ActiveDocument.Tables.Count >= 1 Then Set oDoc1 = ActiveDocument
Set MyRange = Documents.Add.Range ( Start:=0,End:=0) For Each oTable In oDoc1.Tables oTable.Range.Copy With MyRange
.Paste
.Collapse Direction:=wdCollapseEnd .InsertParagraphAfter
.Collapse Direction:=wdCollapseEnd End With Next End If
? 12.6.7 引用活动元素
要引用活动段落、表格、域或其他文档元素,可使用Selection属性返回一个Selection 对
第 17 页 共 18 页
《中文Word2000 高级教程》
象。通过Selection 对象,可以访问所选内容中的所有段落或第一个段落。
下面的代码为所选内容的第一张表格第一行应用底纹。
Selection.Tables (1) .Rows (1) .Shading.Texture =wdTexture10Percent
如果所选内容中没有表格,则会产生错误。使用Count 属性可以判定所选内容中是否有表格。下面的代码为所选内容的第一张表格第一行应用底纹。
If Selection.Tables.Count >= 1 Then
Selection.Tables(1).Rows(1).Shading.Texture =wdTexture10Percent Else
MsgBox \End If
下面的代码为所选内容中每张表格的第一行应用底纹。For Each...Next 循环用来循环遍历所选内容中的每个表格。
If Selection.Tables.Count >= 1 Then For Each aTable In Selection.Tables
aTable.Rows (1) .Shading.Texture =wdTexture10Percent Next aTable End If
? 12.7 小结本章
介绍了如何利用VBA 来增强窗体的交互性,在第八章介绍了如何使用窗体,并说明要增强窗体的交互性,需要用到VBA 的编程,VBA 可以使用原来的对话框,也可以调用自己定义的对话框。
本章还介绍了如何使用窗体的对象、集合、控件,如何为窗体设置属性,如何设置对象的方法和事件等。
最后详细介绍了如何利用VBA处理表格,因为表格的使用是非常广泛的。
第 18 页 共 18 页