范围查找功能

时间:2019-06-13 08:31:11

标签: excel vba

使用Range.Find方法不适用于文件名。 范围DocPresent始终为“无”

我正在处理多个Excel工作表,并想跟踪我已经处理过的工作表。为了确保我在重新运行宏时不会再次处理工作表

Dim wbname1 As String
wbname1 = ActiveWorkbook.Name

Range("A1").End(xlDown).Offset(1, 0) = wbname1


Dim DocPresent As Range
Set DocPresent = Range("A1:A1000").Find(What:=wbname1)

如果它找到了相应的单元格,我希望该范围返回正确的范围。

1 个答案:

答案 0 :(得分:2)

请注意,Range("A1").End(xlDown)可能会低于A1000,但是您的.Find只是在A1000之前。

因此,请使用整列Range("A:A").Find…或找到最后使用的单元格Range("A1", Cells(Rows.Count, "A").End(xlUp)).Find…

并为所有您的范围指定工作簿和工作表!

Dim wbname1 As String
wbname1 = ActiveWorkbook.Name

Dim ws As Worksheet
Set ws = ThisWorkbook.Worksheets("MySheet")

ws.Range("A1").End(xlDown).Offset(1, 0) = wbname1

Dim DocPresent As Range
Set DocPresent = ws.Range("A1", ws.Cells(ws.Rows.Count, "A").End(xlUp)).Find(What:=wbname1, LookAt:=xlWhole)

请注意,ThisWorkbook指向运行此代码的工作簿。但是ActiveWorkbook指向在代码运行时具有焦点的工作簿(位于顶部)。 ActiveWorkbook可以通过用户单击轻松更改,但是ThisWorkbook始终相同。

还请注意,Range.Find method有一个LookAt参数,应始终始终指定为xlWholexlPart。否则,VBA将使用VBA或用户界面最后使用的那个。因此,您永远都不知道要使用哪个VBA,因此请始终指定它。

根据下面的评论,您应该在使用Find之前检查您的DocPresent方法是否成功,以免出现错误:

If Not DocPresent Is Nothing Then
    'do your stuff using DocPresent 
Else
    MsgBox "'" & wbname1 & "' was not found.", vbCritical
    Exit Sub
End If