回 帖 发 新 帖 刷新版面

主题:由WORD宏命令改作VFP命令,为什么达不到预期效果???

Sub Macro1()
'
' Macro1 Macro
' 宏在 2010-11-20 由 微软用户 录制
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "标    题"
        .Replacement.Text = "标题内容"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchByte = True
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
End Sub

上面是我在WORD中录制的一段查找、替换的宏命令,将其改作VFP命令如下:
(本人通过建立对象“OLE”打开WORD文档)
OLE.Selection.Find.ClearFormatting
OLE.Selection.Find.Replacement.ClearFormatting
With OLE.Selection.Find
        .Text = "标    题"
        .Replacement.Text = "标题内容"
        .Forward = .T.
        .Wrap = 1    && wdFindContinue=1
        .Format = .F.
        .MatchCase = .F.
        .MatchWholeWord = .F.
        .MatchByte = .T.
        .MatchWildcards = .F.
        .MatchSoundsLike = .F.
        .MatchAllWordForms = .F.
    EndWith
    OLE.Selection.Find.Execute(2)     &&wdReplaceAll=2

在WORD中运行宏时,可将“标    题”替换为“标题内容”,而在VFP下执行由WORD宏命令改写的VFP命令时,只是找到“标    题”,但未将其替换为“标题内容”。请问:
    1.是什么原因导致不能替换???
    2.将WORD宏命令:Selection.Find.Execute Replace:=wdReplaceAll
      改作VFP命令:OLE.Selection.Find.Execute(2)     &&wdReplaceAll=2
      正确与否???
  
                                 请赐教
                               谢谢!!!





回复列表 (共3个回复)

沙发


Execute 方法
参阅参阅参阅参阅应用于 Find 对象的 Execute 方法。

运行指定的查找操作。如果查找成功,则返回 True。Boolean 类型。

expression.Execute(FindText, MatchCase, MatchWholeWord, MatchWildcards, MatchSoundsLike, MatchAllWordForms, Forward, Wrap, Format, ReplaceWith, Replace, MatchKashida, MatchDiacritics, MatchAlefHamza, MatchControl)
expression     必需。该表达式返回 Find 对象。

FindText    Variant 类型,可选。指定需搜索的文本。可用空字符串 ("") 搜索格式,也可通过指定相应的字符代码搜索特殊字符。例如,“^p”对应段落标记,“^t”对应制表符。有关可以使用的特殊字符列表,请参阅查找和替换文本或其他项。

MatchCase     Variant 类型,可选。如果为 True,则指定查找文本区分大小写。相当于“编辑”菜单“查找和替换”对话框中的“区分大小写”复选框。

MatchWholeWord     Variant 类型,可选。如果为 True,则查找操作只定位于完全匹配的单词,而并非长单词中的部分文字。相当于“查找和替换”对话框中的“全字匹配”复选框。

MatchWildcards     Variant 类型,可选。如果为 True,则查找的文字包含特殊搜索操作符。相当于“查找和替换”对话框中的“使用通配符”复选框。

MatchSoundsLike     Variant 类型,可选。如果为 True,则查找操作定位于与要查找的文字发音相近的单词。相当于“查找和替换”对话框中的“同音”复选框。

MatchAllWordForms     Variant 类型,可选。如果为 True,则查找操作定位于要查找的文字的所有形式(例如,查找“sit”的同时,还查找“sitting”和“sat”),相当于“查找和替换”对话框中的“查找单词的各种形式”复选框。

Forward     Variant 类型,可选。如果为 True,则向下(向文档尾部)搜索。

Wrap    Variant 类型,可选。如果搜索从不是文档的起始位置开始,并已搜索到文档的末尾(如 Forward 设置为 False,则相反),用本参数控制接下来的操作。当存在选定内容或区域,而又没有在该选定内容或区域中找到搜索文字时,也可用本参数控制接下来的操作。可取下列 WdFindWrap 常量之一。

WdFindWrap 可以是下列 WdFindWrap 常量之一: 
wdFindAsk 搜索完选定内容或者区域后,Microsoft Word 会显示一条消息,询问是否搜索文档的其他部分。 
wdFindContinue 到达搜索区域的开始或者结尾时,继续执行查找操作。 
wdFindStop 到达搜索区域的开始或者结尾时,停止执行查找操作。 

Format     Variant 类型,可选。如果为 True,则查找操作定位于格式或带格式的文本,而不是查找文本。

ReplaceWith     Variant 类型,可选。替换文字。若要删除由 Find 参数指定的文字,可使用空字符串 ("")。与 Find 参数相似,本参数也可以指定特殊的字符和高级搜索条件。若要将图形对象或者其他非文本项指定为替换内容,可将这些项置于“剪贴板”上,然后将 ReplaceWith 指定为“^c”。

Replace    Variant 类型,可选。指定执行替换的个数:一个、全部或者不替换。可取下列 WdReplace 常量之一。

WdReplace 可以是下列 WdReplace 常量之一: 
wdReplaceAll 
wdReplaceNone 
wdReplaceOne 

MatchKashida     Variant 类型,可选。如果为 True,则查找结果应与阿拉伯语文档中区分 kashidas 的文本相匹配。由于选择或安装的语言支持不同(例如,英语(美国)),此参数可能不可用。

MatchDiacritics     Variant 类型,可选。如果为 True,则查找操作在从右向左的语言的文档中按照匹配音调符号来匹配文字。由于选择或安装的语言支持不同(例如,英语(美国)),此参数可能不可用。

MatchAlefHamza     Variant 类型,可选。如果为 True,则在阿拉伯语文档中,查找内容应与区分 Alef Hamzas 的文本相匹配。由于选择或安装的语言支持不同(例如,英语(美国)),此参数可能不可用。

MatchControl     Variant 类型,可选。如果为 True,则在从右向左的语言的文档中,查找内容应与区分双向控制字符的文本相匹配。由于选择或安装的语言支持不同(例如,英语(美国)),此参数可能不可用。

说明
如果 MatchWildcards 为 True,可为 FindText 参数指定通配符和其他高级搜索准则,例如,“*(ing)”查找任何以“ing”结尾的单词。

若要搜索符号字符,可键入脱字符号 (^)、零 (0),然后键入符号字符的代码。例如,“^0151”对应一条长划线 (—)。

除非另外指定,否则替换文本将沿用文档中被替换文本的格式。例如,如果用“xyz”替换字符串“abc”,那么加粗“abc”将被加粗字符串“xyz”所替换。

另外,如果 MatchCase 为 False,那么查找到的大写文本将被大写的替换文本替换,而无论搜索文本和替换文本是否大小写。上例中,“ABC”将被“XYZ”替换。

板凳

我很少用WORD,用EXCEL比较频繁。

建议:先试试省略参数,在replace参数前面加十个逗号,然后写wdReplaceAll的常数值2
OLE.Selection.Find.Execute(,,,,,,,,,,2)     &&wdReplaceAll=2
如果出错,那么请你把上述的所有参数都写上写清楚。

“:=”是VB里的指定参数名的意思。

3 楼

MOZ:
    感谢您的帮助,按照您给出的方法,已经达到预期效果。

                 再次谢谢您

我来回复

您尚未登录,请登录后再回复。点此登录或注册