在WORD文档中的文本中有的加了特殊标记,如: “[MM(?]……[MM)]”就是将标记中的文本变成文档的页眉。其中的“?”为“L”或“R”(后面详述),为此,我写下了以下代码: Sub 加页眉() ' ' 加页眉 Macro ' 宏在 2007-1-23 由 hx2 创建 ' Dim myRange As Range, myString As String, KeyText As String Dim lngStart As Long, lngEnd As Long, keyRange As Range On Error Resume Next '忽略错误 Application.ScreenUpdating = False '关闭屏幕更新 Set myRange = ActiveDocument.Content '定义一个RANGE对象为主文档内容 With myRange.Find '查找 .ClearFormatting '清除格式 .MatchWildcards = True '使用通配符 .Text = "\[MM\(*\](*)\[MM\)\]" '查找内容,带有"通配符" Do While .Execute '如果成功查找 lngStart = myRange.Start '取得查找后的RANGE对象的起始位置 lngEnd = VBA.InStr(myRange.Text, "]") + lngStart '取行"]"所在位置 Set keyRange = ActiveDocument.Range(lngStart, lngEnd - 1) '定义一个RANGE对象,此不包括右侧]括号 .Execute replacewith:="\1", Replace:=wdReplaceOne '重新执行查找并替换 lngStart = myRange.Start '取得替换后的myRange对象的起点与终点位置 lngEnd = myRange.End myRange.Select '加页眉(MM) ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader Selection.TypeText Text:=myRange myRange.Delete '删除正文中的[MM]注解文本 ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument Loop End With Application.ScreenUpdating = True End Sub 经测试能达到目的,但实际问题更为复杂。 问题1 如果“[MM(?]……[MM)]”为“[MM(L]……[MM)]”,则要求将页眉的文本居左排; 如果“[MM(?]……[MM)]”为“[MM(R]……[MM)]”,则要求将页眉的文本居右排; 如果“[MM(?]……[MM)]”为“[MM(]……[MM)]”,则要求将页眉的文本居中排; 当然将上面的代码写成3段With……End with也可做到,但我想肯定有更简便的方法。 问题2 在文档中还可能同时出现下列文本(“?”也是参数“L”或“R”,意义同前面在“[MM(?]……[MM)]”中的叙述) “[DM(?]……[DM)]”就是将标记中的文本“……”变成奇数页的页眉; “[SM(?]……[SM)]”就是将标记中的文本变成偶数页的页眉; 连同“[MM(?]……[MM)]”,这3种页眉的方式和其中的文本(……)在文档中可能多次出现,其内容也不同。比如,不同的章节,页眉的内容就不同。
问题3 在文档中还可能有“[YM]”,就是在文档中加页码(这里简化了,只在每页脚的中部加一页码即可)。 请高手帮我修改代码能完全达到上述目的。
[此贴子已经被作者于2007-1-23 10:34:53编辑过] |