+ -
当前位置:首页 → 问答吧 → 如何查找一个变量字符串?

如何查找一个变量字符串?

时间:2011-05-31

来源:互联网

我想做一个判断该文档存在的最后一个"文档序号:X"(X是一个小于50的数字)的字段,返回结果并关闭文档的宏,原宏如下
然而该宏会在如下加粗部分报错,错误为5560:“查找内容”文本中包含有无效的“模式匹配”表达式。
我想请问各位高手,如何改才能使这个宏能完成预期的功能并且不出错?
或者更具体地说,如何查找一个变量字符串?(我试过,定义一个字符串类型的c,然后c="文档序号:" & i,并且.text=c依然出现同样的错)

Sub 找最后一个文档序号()

    Selection.Find.ClearFormatting
    Dim i As Integer
    Dim c As String
   
    i = 50
    While i > 1
    With Selection.Find
        .Text = "文档序号:" & i
        .MatchWildcards = True
    End With
    With Selection.Find
       If .Execute = True Then            
            MsgBox (i)
            Documents.Close
            Exit Sub
        End If
    End With
    i = i - 1
    Wend
    MsgBox "not found"
End Sub

[ 本帖最后由 akuseiru 于 2011-5-31 18:08 编辑 ]

作者: akuseiru   发布时间: 2011-05-31

俺 这运行正常

附件

TM截图未命名.png(7.73 KB)

2011-5-31 17:16

作者: wudixin96   发布时间: 2011-05-31

嗯对就是这个效果...泪流满面啊...顺带一提俺是word2007,俺这就是错。。继续求救

[ 本帖最后由 akuseiru 于 2011-5-31 17:21 编辑 ]

作者: akuseiru   发布时间: 2011-05-31

顺带一提俺是word2010和2003都运行正确

作者: wudixin96   发布时间: 2011-05-31

这是为什么。。。大家快来围观本悲剧哥了啊

作者: akuseiru   发布时间: 2011-05-31

可以试试下面的代码。当然,代码是从文档末尾起倒查匹配的,如果序号不是按升序排列,查到的就不是最大的序号。
复制内容到剪贴板
代码:
Sub test()
    With ActiveDocument.Content.Find
        .Text = "文档序号:[0-9]{1,2}"
        .MatchWildcards = True
        .Forward = False
        If .Execute = True Then
            .Parent.Select
            MsgBox Mid(.Parent.Text, 6)
            'ActiveDocument.Close True
        Else
            MsgBox "not found"
        End If
    End With
End Sub

作者: sylun   发布时间: 2011-05-31

找到原因了!问题就出在"文档序号"上,其实原文不是这几个字,然后这几个字里有非法字符@...所以给你们的宏是能跑的
总之在各位及时的帮助下找到了原因,多谢了
此外6楼的可以实现,思路受教了!

作者: akuseiru   发布时间: 2011-05-31