范围。查找并使用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

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 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