使用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)
如果它找到了相应的单元格,我希望该范围返回正确的范围。
答案 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
参数,应始终始终指定为xlWhole
或xlPart
。否则,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