我的代码中的这一行出错,任何想法可能是什么问题?
Intersect(.UsedRange, .UsedRange.Offset(1)).SpecialCells(12).EntireRow.Delete
以下是代码的其余部分:
Sub DefineDL_IDL()
Dim wbTHMacro As Workbook, wsRegulares As Worksheet, wsRegularesDemitidos As Worksheet, wsTempActivos As Worksheet, _
wsTempJA As Worksheet, wsTempFit As Worksheet, wsTempDemitidos As Worksheet, wsPS As Worksheet, wsResultados As Worksheet, _
wsDLList As Worksheet, wssheet As Worksheet, count_DL As Integer, count_IDL As Integer
Dim x&, r As Long
'*************REGULARES***********
Sheets("Regulares").Select
'Debug.Print xlToRight
'Sheets("Raw").Copy before:=Sheets(2)
With Sheets("Regulares")
'.Name = "Final2"
.UsedRange.AutoFilter 9, "INATIVE"
Intersect(.UsedRange, .UsedRange.Offset(1)).SpecialCells(12).EntireRow.Delete
r = WorksheetFunction.CountA(.Range("A:A"))
.UsedRange.AutoFilter
.Range("J:J").Insert xlToRight
.Range("J1").Value = "Real MO"
.Range("K:K").Cut
.Range("I:I").Insert xlToRight
.Range("Q:Q").Cut
.Range("I:I").Insert xlToRight
.Range("L2:L" & r).FormulaR1C1 = "=VLOOKUP(RC[-3],'DL List'!C[-11]:C[-10],2,0)"
.Range("L2:L" & r).Value = .Range("L2:L" & r).Value
For x = 2 To r
If Range("L" & x).Text = "#N/A" Then
'If Range("K" & x).Value = "DL" Then
' Range("L" & x).Value = "DL"
'Else: Range("L" & x).Value = "IDL": End If
Range("L" & x).Value = "IDL"
End If
Next x
End With
count_DL = Application.WorksheetFunction.CountIf(ActiveSheet.Range("L:L"), "DL")
count_IDL = Application.WorksheetFunction.CountIf(ActiveSheet.Range("L:L"), "IDL")
Worksheets("Resultados").Range("B17") = count_DL
Worksheets("Resultados").Range("C17") = count_IDL
答案 0 :(得分:1)
您的表达式适用于我的测试工作表,因此问题必须与您的数据有关。
我不喜欢像这样将属性串在一起,因为目标变得非常不清楚。更糟糕的是,如果它失败了,你就不知道哪里失败了。
尝试用以下语句替换语句:
Dim rng As Range
Debug.Print .UsedRange.Address
Debug.Print .UsedRange.Offset(1).Address
Set rng = Intersect(.UsedRange, .UsedRange.Offset(1))
Debug.Print rng.Address
Debug.Print rng.SpecialCells(12).Address
Debug.Print rng.SpecialCells(12).EntireRow.Address
rng.SpecialCells(12).EntireRow.Delete
逐步执行此代码以确保每个范围都符合您的预期。
我猜测范围内没有可见的单元格,因此您尝试删除Nothing
。
修改有关查找工作表最后一行的更多信息。
有多种方法可以找到工作表的最后使用的行或列。在所有情况下都不起作用,但UsedRange
是最不可能给出预期结果的方法。
最常见的查找最后一行的方法是:
RowLast = .Cells(Rows.Count,9).End(xlUp).Row
这是VBA,相当于将光标放在第9列的底部单元格中,然后单击 Ctrl + Up 。除非您在底部单元格中有值,否则RowLast
将设置为第9行中的值的最后一行。要使此方法有用,在最后使用的行的指定列中必须有一个值。
Find
是通过行或列查找最后一个值的可靠方法。
SpecialCells
是另一种有用的方法。
我的这个答案VBA Dynamic Ranges包含一个宏FindFinal
,它演示了这些方法如何无法提供您可能期望的结果。如果您希望完全理解这些问题,请通过此宏来研究会发生什么。