我正在与我的宏作斗争。
目标和主要思想:它打开不同的xls文件,基于自动筛选,它检查第10列,以选择具有四个“最后-星期五-天”的行(因此,如果我们有18/02,它将返回13/02,06/02,30/01,23/01)。
问题:问题是只有当我的文件中没有像aboves.Even这样的日期时,虽然文件应该自动关闭,但它试图复制空范围!!我使用Select Case (代码如下)

代码:
Rows("4:4").Select '*Autofilter - this part is ok*
Selection.AutoFilter *' four last-Fridays from the Column - ok*
ActiveSheet.Range("J5", Range("J5").End(xlDown)).AutoFilter Field:=10, Criteria1:=Array( _
LastFridayDate, Friday2weeksagoDate, Friday3weeksagoDate, Friday4weeksagoDate), Operator:= _
xlFilterValues
Range("A4").Offset(1, 0).Activate
Select Case IsEmpty(ActiveCell) ' *MISTAKE!!*
Case True MISTAKE!! *no data in file, file should be closed!*
Workbooks("prima UKACZEE.xls").Close SaveChanges:=False
Case Else ' *this part always works*
Range("A5", Range("A5").End(xlDown).End(xlToRight)).Select
Selection.Copy
Workbooks("Makro XXX Claim Hours v.01.xls").Sheets("TRN Claim Report - Labour").Activate
Range("A5").End(xlDown).Offset(1, 0).Activate
ActiveSheet.Paste
Application.DisplayAlerts = False *' closing file - ok*
Workbooks("prima UKACZEE.xls").Close SaveChanges:=False
Application.DisplayAlerts = True
End Select如果你能帮忙的话。欣赏
发布于 2015-02-18 22:28:50
这里的问题是,AutoFilter不会使行不存在,它只是将它们隐藏起来。无论是否应用了过滤器,Range("A4").Offset(1,0)都将始终引用单元格A5,因此如果A5中有值,那么IsEmpty(ActiveCell)将始终返回false。
要解决这个问题,您必须使用Range对象的SpecialCells方法。下面的代码将激活列A中位于单元格A4下的第一个可见单元格,在本例中是过滤后的第一行结果。
Range("A5:A" & ActiveSheet.Rows.Count).SpecialCells(xlCellTypeVisible).Cells(1, 1).Activatehttps://stackoverflow.com/questions/28584261
复制相似问题