防止 Range.Find() 更改“匹配整个单元格内容”用户界面设置

ste*_*nci 6 excel vba

运行以下代码的第一行后,Excel 会更改用户界面中的“匹配整个单元格内容”设置。结果是,下次用户按下Ctrl+F 时,将在整个单元格内容中进行搜索。我不喜欢改变影响用户体验的设置的 VBA 宏,所以我总是执行第二行,它执行另一个搜索并将匹配整个单元格内容设置回其默认值。

'execute the find and changes the entire cell content setting
Set C = MyRange.Find(SomeText, LookAt:=xlWhole)

'put the setting back to the default value (not the previous value)
MyRange.SomeText ParName, LookAt:=xlPart
Run Code Online (Sandbox Code Playgroud)

问题是它将它设置回默认值,而不是用户最后设置的值。

我宁愿有类似的东西:

'store the current entire cell content setting
OldLookAt = Application.FindLookAt

'execute the find
Set C = MyRange.Find(SomeText, LookAt:=xlWhole)

'restore the original setting
Application.FindLookAt = OldLookAt
Run Code Online (Sandbox Code Playgroud)

我编的,Application.FindLookAt因为我找不到它。

有没有办法在Range.Find不影响用户体验的情况下做某事?

end*_*and 5

我花了相当多的时间查看 Excel 对象库和 MSDN 文档,但似乎无法检索。

不幸的是,如果您不将该参数包含为默认值,Excel 看起来实际上会覆盖并设置您的用户设置。

Private Sub testXLLookAT()

    'Setup fake falues
    Dim mCurLookup As XlLookAt
    Range("A1").value = "Test1"
    Range("A2").value = "Test"

    'get current setting, but this doesn't work as it defaults...
    If Range("A1:A2").Find("Test").Address = "A1" Then
        mCurLookup = xlPart
    Else
        mCurLookup = xlWhole
    End If

    'your find here

    'note - mCurLookup always becomes xlWhole...
    Range("A1:A2").Find What:="Test", LookAt:=mCurLookup



End Sub
Run Code Online (Sandbox Code Playgroud)

否则,上面的代码可以工作 - 但它不会,因为即使不包含默认值,它也会被覆盖。