范围。查找并使用Excel冻结
Microsoft在VBA的Range.Find函数中的条目有以下代码作为示例(): 我试图使用它,包括下面的With语句,但Excel冻结了范围。查找并使用Excel冻结,excel,vba,Excel,Vba,Microsoft在VBA的Range.Find函数中的条目有以下代码作为示例(): 我试图使用它,包括下面的With语句,但Excel冻结了 With Range("a1:f50") Set c = .Find("F-Value", LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do
With Range("a1:f50")
Set c = .Find("F-Value", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
With c.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Set c = .FindNext(c)
Loop While Not c Is Nothing
End If
End With
我想知道是否同时使用Range.Find和With会使代码太重,因为我今年买了这台计算机,它整体运行良好。您删除了
c.Address firstAddress
检查,这是在您的用例中退出循环的唯一方法
Find()/FindNext()
始终在您的范围内循环,直到没有匹配的值-当它到达末尾时,它只会重新开始。如何解释这一点取决于在定位单元格后如何处理单元格值
- 如果要替换该值,使其不再与查找匹配,则可以在
未能匹配时退出循环,从而返回Find()
(请参见下面的第二个代码示例)Nothing
- 如果不更改循环中的单元格值,那么Find将继续循环,一次又一次地返回相同的单元格,除非找到所有单个单元格后,您有办法退出循环。通常通过保存第一个单元格的地址,然后在第二次返回该单元格时立即退出循环来完成此操作
Dim firstAddress作为字符串,c作为范围
带范围(“a1:f50”)
设置c=.Find(“F-Value,LookIn:=xlValues,LookAt:=xlWhole)”您删除了c.Address firstAddress
检查,这是在用例中退出循环的唯一方法
Find()/FindNext()
始终在您的范围内循环,直到没有匹配的值-当它到达末尾时,它只会重新开始。如何解释这一点取决于在定位单元格后如何处理单元格值
- 如果要替换该值,使其不再与查找匹配,则可以在
Find()
未能匹配时退出循环,从而返回Nothing
(请参见下面的第二个代码示例)
- 如果不更改循环中的单元格值,那么Find将继续循环,一次又一次地返回相同的单元格,除非找到所有单个单元格后,您有办法退出循环。通常通过保存第一个单元格的地址,然后在第二次返回该单元格时立即退出循环来完成此操作
因此,对于您的“不可替换”用例,这很好:
Dim firstAddress作为字符串,c作为范围
带范围(“a1:f50”)
设置c=.Find(“F-Value”,LookIn:=xlValues,LookAt:=xlother)”您删除了c.Address firstAddress
,这是退出循环的唯一方法,我不明白。为什么?另外,将“With”语句替换为c.Value=5运行正常。将该值设置为5将确保再也找不到特定的单元格(假设itm为5),这样,一旦所有值都被替换,循环最终将退出。您删除了c.Address firstAddress
,这是退出循环的唯一方法,我不明白。为什么?另外,将“With”语句替换为c.Value=5也可以运行。将该值设置为5将确保再也找不到特定的单元格(假设为itm 5),因此在替换完所有值后,循环最终将退出。很抱歉,我从Microsoft粘贴了错误的代码。我现在改了。看起来c.Address实际上是用来创建名为firstAddress的变量的。那会是什么呢?另外,在我的代码中写firstAddress=c。Address并不能解决问题。用你的实际代码更新你的帖子会有帮助,包括地址部分,它对你不起作用。你的Microsoft代码现在看起来也错了-请提供该示例的链接。我已经更新了我的代码,并提供了Microsoft示例的链接。你发布的示例非常糟糕,我不确定它在那里做了什么:它“起作用”,因为该值在循环中被替换,但是firstAddress=c.Address
行是完全多余的。很抱歉,我从Microsoft粘贴了错误的代码。我现在改了。看起来c.Address实际上是用来创建名为firstAddress的变量的。那会是什么呢?另外,在我的代码中写firstAddress=c。Address并不能解决问题。用你的实际代码更新你的帖子会有帮助,包括地址部分,它对你不起作用。你的Microsoft代码现在看起来也错了-请提供该示例的链接。我已经更新了我的代码,并提供了Microsoft示例的链接。你发布的示例非常糟糕,我不确定它在那里做了什么:它“起作用”,因为该值在循环中被替换,但是firstAddress=c.Address
行是完全冗余的。
With Range("a1:f50")
Set c = .Find("F-Value", LookIn:=xlValues)
If Not c Is Nothing Then
firstAddress = c.Address
Do
With c.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Set c = .FindNext(c)
Loop While Not c Is Nothing
End If
End With