首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Excel VBA查找方法在工作簿到工作表中重置搜索框。

Excel VBA查找方法在工作簿到工作表中重置搜索框。
EN

Stack Overflow用户
提问于 2022-04-27 19:04:41
回答 2查看 50关注 0票数 2

我经常在Excel中使用Ctrl在多个工作表中查找工作簿中的内容,因此“内部”字段通常设置为"Workbook“。我还运行宏,并发现运行它们的一个副作用是,当在Excel中执行Ctrl时,“is”字段被重置为"Sheet“,而在此之前它是"Workbook”。我追踪到find方法就是这种重置发生的地方,我想知道如何确保“内部”设置返回到运行宏之前的任何设置。我的宏有以下内容:

代码语言:javascript
运行
复制
lastCol = Sheets(sheetFocus).Cells.Find("*", [a1], , , xlByColumns, xlPrevious).Column
lastRow = Sheets(sheetFocus).Cells.Find("*", [a1], , , xlByRows, xlPrevious).row

我看不出哪个参数正在为Ctrl重置Excel中的内容。在执行find方法之前,是否有一种方法可以停止副作用或测试“内部”设置是什么,这样我就可以将其设置回原来的位置了吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-04-27 21:05:05

我知道使用SendKeys方法在VBA中完成某些事情通常是不可接受的,但我认为这是您的场景的唯一解决方案。

在得到最后一行和列之后,创建这个子命令并调用它。

代码语言:javascript
运行
复制
Public Sub ResetFind()
    
    ' Open Find/Replace dialog
    Application.CommandBars("Edit").Controls("Find...").Execute
    DoEvents
    
    'reset "Within:" entry using <Alt>-H
    Application.SendKeys ("%H{DOWN}") ' use Up Arrow to choose Sheet, Down arrow to choose Workbook
    DoEvents
    
    ' Set Focus to Find box (using <Shift><Tab>
    Application.SendKeys ("+{TAB}+{TAB}")
    DoEvents
    
    ' Clear out previous entry
    Application.SendKeys ("{BACKSPACE}")
    DoEvents
    
    ' Set Focus to Close button (using <Shift><Tab>
    Application.SendKeys ("+{TAB}+{TAB}")
    DoEvents
        
    ' Close Find box
    Application.SendKeys ("{ENTER}")
    DoEvents
    
End Sub

然后在您的代码之后调用它:

代码语言:javascript
运行
复制
lastCol = Sheets(sheetFocus).Cells.Find("*", [a1], , , xlByColumns, xlPrevious).Column
lastRow = Sheets(sheetFocus).Cells.Find("*", [a1], , , xlByRows, xlPrevious).row
ResetFind()

注:

我知道它没有找到或使用实际的最后一个值--我不知道是如何实现的--也许使用FindWindow API调用,然后以这种方式获得前面的值。如果您可以用SPY++找到控件(窗口)的名称,也许可以这样做?

或者就像你说的--也许你可以满足于这只是个小麻烦?

票数 2
EN

Stack Overflow用户

发布于 2022-04-28 19:56:08

基于@dbmitch,我使用了以下代码。它假定“查找和替换”框中的“选项”已经扩展。

代码语言:javascript
运行
复制
Public Sub ResetFind()
    ' Open Find/Replace dialog
    Application.CommandBars("Edit").Controls("Find...").Execute
    DoEvents

    'reset "Within:" entry using <Alt>-H
    Application.SendKeys ("%H{DOWN}") ' use Up Arrow to choose Sheet, Down arrow to choose Workbook
    DoEvents
    
    ' Set Focus to Find box (using <Alt>-N
    Application.SendKeys ("%N{DOWN}") ' use Down Arrow to choose last search value
    DoEvents
    
    ' Close Find box
    Application.SendKeys ("{ESC}{ESC}")
    DoEvents
End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72034048

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档