代码中的应用程序定义或对象定义错误

我在代码中的这一行中得到一个错误,任何想法可能是什么?

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 

你的expression式在我的testing工作表上工作,所以这个问题肯定是关于你的数据的。

我不喜欢这样串连属性,因为目标变得很不清楚。 更糟的是,如果失败了,你不知道哪里失败了。

尝试用这个replace语句:

 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是最不可能给出您期望的结果的方法。

根据这里的答案来判断,find最后一行最stream行的方法是:

 RowLast = .Cells(Rows.Count,9).End(xlUp).Row 

这是将光标放在第9列的底部单元格中并单击Ctrl + 向上的VBA等效项。 除非在底部单元格中有一个值,否则RowLast将被设置为列9中值的最后一行。 对于这个方法有任何用处,在最后使用的行的指定列中必须有一个值。

Find是find行或列的最后一个值的可靠方法。

SpecialCells是另一种有用的方法。

我的VBAdynamic范围的答案包括一个macros, FindFinal ,它演示了这些方法可能无法给你所期望的结果。 如果你想完全理解这些问题,请通过这个macros来研究发生了什么。