6

运行以下代码的第一行后,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

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

我宁愿有类似的东西:

'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不影响用户体验的情况下做某事?

4

2 回答 2

4

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

否则,上面的代码会起作用——但它不会因为默认值被覆盖,即使它没有被包含在内。

于 2013-10-10T14:31:15.450 回答
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。

于 2014-07-06T00:26:15.683 回答