代码之家  ›  专栏  ›  技术社区  ›  Anu

如何在Excel VBA中清除搜索条件和搜索后的单词

  •  0
  • Anu  · 技术社区  · 6 年前

    场景

    我有一个用户表单,其中一个按钮执行matchcase=true的搜索功能,以及其他自动化工作。每当这个用户表单处于活动状态,并且我尝试在其他打开的worbook中进行搜索时,总是会勾选匹配大小写。每当我需要在该用户窗体处于活动状态时手动取消选中Excel中的匹配大小写。请看图片

    当用户窗体不显示时

    当用户窗体显示时

    问题

    是否有任何方法可以在matchcase=true的情况下运行宏,但同时打开其他工作簿并按ctrl+f matchcase(默认情况下未选中)?换句话说,在执行搜索宏之后,如何删除搜索关键字和搜索条件?我正在使用以下搜索代码,其中搜索词作为变量 word

    selection.find(what:=word,after:=activecell,lookin:=xlformula,,_
    查找:=xlwhole,搜索顺序:=xlbyrows,搜索方向:=xlnext,,_
    匹配大小写:=true,搜索格式:=false)。激活
    < /代码> <每当这个用户表单处于活动状态,并且我尝试在其他打开的worbook中进行搜索时,总是勾选匹配大小写。每当我需要在该用户窗体处于活动状态时手动取消选中Excel中的匹配大小写。请看图片

    当用户窗体未显示时

    enter image description here

    当用户窗体显示时

    enter image description here

    问题

    是否有任何方法可以在matchcase=true的情况下运行宏,但同时打开其他工作簿并按ctrl+f matchcase(默认情况下未选中)?换句话说,在执行搜索宏之后,如何删除搜索关键字和搜索条件?我使用以下搜索代码,并将搜索词作为变量worD

    Selection.Find(What:=worD, After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=True, SearchFormat:=False).Activate
    
    3 回复  |  直到 6 年前
        1
  •  3
  •   FunThomas    6 年前

    完成后执行虚拟搜索

    Sub clearFind(ws As Worksheet)
        With ws.Cells
            .Find What:="", After:=ActiveCell, LookIn:=xlFormulas, _
                  LookAt:=xlPart, SearchOrder:=xlByRows, _
                  SearchDirection:=xlNext, MatchCase:=False, _
                  SearchFormat:=False
        End With
    End Sub
    
        2
  •  0
  •   Rafał B.    6 年前

    理论上,也许你可以使用sendkeys,但根据我的经验,它是不可靠的。

     ' here set a variable to search. After that:
          Application.SendKeys ("^f")
          Application.SendKeys ("{DELETE}")
     ' and finally paste variable.value via SendKeys
    
        3
  •  0
  •   Anu    6 年前

    根据栈溢出中的一些成员,一个简单的方法是伪搜索,它清除匹配案例和搜索历史。

    Sub dummySearch()
        dummy = Cells.Find(What:="", LookIn:=xlValues, LookAt:=xlPart)
    End Sub