运行以下代码的第一行后,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
?
答案 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
否则,上面的代码会起作用 - 但它不会被默认覆盖,即使它没有被包含。