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

时间:2013-10-09 21:57:50

标签: vba excel-vba excel

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

'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

问题在于它将其设置回默认值,而不是用户设置的值。

我宁愿有类似的东西:

'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

我编造了Application.FindLookAt,因为我无法找到它。

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

2 个答案:

答案 0 :(得分:3)

这是一个可用于返回当前LookAt默认值的函数,因此可以重置。

Function lGetCurLookAt() As Long
'--returns current default value for Range.Find method's
'    LookAt parameter.

 '--use helper cell after all data in col A
 With Cells(Rows.Count, "A").End(xlUp)(3)
   .Value = "TestPart"
   lGetCurLookAt = IIf( _
    .Find(What:="Part", SearchFormat:=False) Is Nothing, _
    xlWhole, xlPart)
   .Value = vbNullString
 End With

End Function

我的第一篇文章,所以我无法对enderland的答案添加评论。本着有用的精神,该代码没有按预期工作,因为它使用A1而不是$ A $ 1.

答案 1 :(得分:2)

我花了很多时间查看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

否则,上面的代码会起作用 - 但它不会被默认覆盖,即使它没有被包含。