
若何利用VBA编写控制Word域的功能.doc
25页...wd...表1:工程工程名称设计阶段工程检索号卷册号工程名称新 制字数图片数建模工具学习(2)fw-jm-2002软件工程专家网6010003表2:校核序号校核主要问题执行情况1排列不齐No2文字错Yes3文字错Yes4文字错No5文字错Yes6文字错No表2:注册网址Word域在软件开发中的应用liyu 摘要 域是Word最具有实用价值的功能之一,它表示文档中可能发生变化的数据或邮件合并文档中套用信函、标签中的占位符Microsoft Word 可以在您使用一些特定命令时插入域,如“插入”菜单上的“日期和时间”命令您也可使用“插入”菜单上的“域”命令手动插入域1.引言事实上,我们在日常工作中常会脱离Microsoft Word的操作环境一般,用户是先建设好一些Word文件模板,然后利用所提供的应用程序功能向Word文件模板中插入域,然后用该域对应的值取代域值,这样就到达了向Microsoft Word文件中插入数据的作用我们常把数据放入数据库中,数据库的内容不断地变化,我们的域值也跟着不断地变化,取到灵活自动更新的作用,要到达这方面的功能,就应该把数据库与Word域结合起来。
首先要解决这一问题,我们必须先了解Word域有关的知识:Word域代码位于花括号或大括号 ( { } )中,域类似于 Microsoft Excel 中的公式:域代码类似于公式,域结果(域结果:当 Microsoft Word 执行域指令时,在文档中插入的文字或图形在打印文档或隐藏域代码时,将以域结果替换域代码类似于公式产生的值可在文档中切换显示域代码及其结果正好,数据库的字段名对应域代码,字段值对应域结果2.实现功能下面是本人利用VBA编写的一通用的处理Word域的程序:主要功能:通用VB6编写通用的类,给用户提供可视化的编辑界面,用于用户在Word文件中插入域标志针对Word文件或Excel表格文件,扫描整个文件,将其中的域标志(如Set “aaa”)取出来,然后通过从数据库中取出”aaa”字段所对应的值,将值填写到文件中域对应的位置假设对应位置已有值,则判断该值与要填写的值是否一样,假设不同则替换插入值分为:A.单纯的值,直接使用一个值替换域B.表格中的单元格假设该表格填写不下,是否增加表格单元以及与该单元关联的域等3.操作步骤3.1建设工程开发方法:启动VB6,新建一ActiveX Dll工程,把工程名更改为VbaWord,把类名Class1更改为CSetDocField,向工程中增加一窗体Form1, 窗体标题为处理Word文档,在Form1上参加2个CommandButton,用于翻开文件和保存文件用的命令按钮;2个ComboBox,用于所插入的字段名;2个 Label;2个CommonDialog,用于执行翻开文件和保存文件。
界面如下:3.2在工程中参加引用按工程--引用--Microsoft Word 10.0 Object Library引用Word(OFFICE 2000为Microsoft Word 9.0 Object Library)3.3增加操作窗体在Form1的代码窗中定义以下变量: Option Base 0'申请Word应该对象及文档对象Private wdApp As New Word.Application()Private wdDoc As New Word.Document()'所处理的Word模板Private FileName As String'申请CSetDocField对象Private mDocFld As New CSetDocField()'Word工具栏对象及菜单栏对象Dim CommandBarIndex() As IntegerDim SaveCommandBarMenuIndex() As Integer' 在Form的Load的事件中定义的翻开和保存文件的格式,并填充ComboBox数据ComboBox数据对应数据库表的字段名,这里由CSetDocField的属性提供。
Private Sub Form_Load() Dim i As Integer CommonDialog1.DialogTitle = "翻开" CommonDialog1.Filter = "Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot" CommonDialog2.DialogTitle = "保存文件" CommonDialog2.Filter = Word文档(*.doc)|*.doc|Word文档模板(*.dot)|*.dot" FieldCount = 0 Me.ScaleY(Me.height, fromscale:=vbTwips, toscale:=vbPoints) For i = 1 To gFieldColl.Count Combo1.AddItem(gFieldColl.Item(i)) Next For i = 1 To gTableColl.Count Combo2.AddItem(gTableColl.Item(i)) NextEnd Sub在Form1的代码窗中定义以下过程和函数: '定义翻开Word文件的过程。
建设Word应该对象及文档对象,并翻开文件 Private Sub OpenWordDocument(ByVal FileName As String) wdApp = CreateObject("Word.Application") wdApp.Documents.Open(FileName) wdDoc = wdApp.ActiveDocument wdDoc.ActiveWindow.DocumentMap = False wdApp.Visible = True IsWordRunning = TrueEnd Sub'在文档中插入域.KeyWord:域的关键字.这里我们利用Word文档对象的域对象的Add方法向Word文件中插入域域的Data属性代表该域的名称插入域时应该选取得插入点(Selection),既用户光标处位置如果该位置是单元格且已插入域应该提示是否覆盖Private Function InsertField(ByVal KeyWord As String) As Integer Dim mySelection As Selection Dim Code As String Dim MyField As Field Dim myRange As Range wdApp.Selection.Collapse(Direction:=wdCollapseEnd) mySelection = wdApp.Selection '插入点 If IsCell(mySelection) = True Then If CellFieldCount(mySelection) > 0 Then If MsgBox("该单元格已有域,是否覆盖?", vbYesNo) = 6 Then mySelection.Cells(1).Select() mySelection.Delete() ' .Text = Value ' mySelection.Delete Unit:=wdCharacter, Count:=1 'mySelection.Cells(1).Range.Fields(1).Delete Else Exit Function End If End If End If MyField = wdDoc.Fields.Add(Range:=mySelection.Range, Type:=wdFieldAddin) MyField.Data = KeyWordEnd Function'选择点(光标)是否是单元格.我们可以通过选择点的表格数判断插入点的性质。
表格数为0,则选择点不位于单元格中,反则不位于单元格中Private Function IsCell(ByVal mySelection As Selection) As Boolean If mySelection.Tables.Count > 0 Then IsCell = True Else IsCell = False End IfEnd Function'取得选择点(光标)的单元格的域数Private Function CellFieldCount(ByVal mySelection As Selection) As Integer CellFieldCount = mySelection.Cells(1).Range.Fields.CountEnd Function'翻开Word文件.并使处理界面位于Word最顶端,适当调整Word位置,关闭Word其它功能Private Sub cmdOpenFile_Click() CommonDialog1.ShowOpen() FileName = CommonDialog1.FileName If FileName = "" Then Exit Sub End If OpenWordDocument(FileName) IsShowField(True) SetWordSize(0, 42, 2000, 2000) CloseCommandBar() Me.top = 0 Me.Left = 0 Me.width = 100000 Me.height = 850 Picture1.top = Me.top Picture1.Left = Me.Left + 2000 cmdSave.Left = 2000 cmdSave.top = cmdOpenFile.top Combo1.Enabled = True Combo2.Enabled = True cmdSave.Visible = True cmdOpenFile.Visible = FalseEnd Sub'保存Word文件.Private Sub cmdSave_Click() IsShowField。












