Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 代码上的应用程序定义或对象定义错误_Vba_Excel - Fatal编程技术网

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

Vba 代码上的应用程序定义或对象定义错误,vba,excel,Vba,Excel,我的代码中这一行有错误,你知道问题是什么吗 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, _

我的代码中这一行有错误,你知道问题是什么吗

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

您的表达式适用于我的测试工作表,因此问题一定与您的数据有关

我不喜欢这样将属性串在一起,因为目标变得非常不明确。更糟糕的是,如果它失败了,你不知道它在哪里失败

尝试用以下内容替换该语句:

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
逐步执行此代码以确保每个范围都符合预期

我猜该范围内没有可见的单元格,因此您尝试删除
无内容

编辑有关查找工作表最后一行的额外信息

查找工作表最后使用的行或列有多种方法。没有一种方法在任何情况下都有效,但
UsedRange
是最不可能给出预期结果的方法

根据这里的答案判断,查找最后一行最常用的方法是:

RowLast = .Cells(Rows.Count,9).End(xlUp).Row 
这相当于将光标放置在第9列的底部单元格中,然后单击Ctrl+Up
RowLast
将设置为第9列中的最后一行,除非底部单元格中有值。要使此方法具有任何用途,必须在上次使用的行的指定列中有一个值

Find
是按行或列查找最后一个值的可靠方法

SpecialCells
是另一种有用的方法


我的回答包括一个宏,
FindFinal
,它演示了这些方法如何无法给出您可能期望的结果。如果您希望完全理解这些问题,请逐步完成此宏,研究会发生什么。

对问题进行了一些编辑,但基本上代码应该对工作簿上的工作表进行更改,并计算DL与IDL之间的员工数……您是否了解了intersect的用法?我在代码的第二行得到了相同的错误:
Debug.Print.UsedRange.Offset(1).Address
基本上宏需要做的是从前一行
.UsedRange.AutoFilter 9,“INATIVE”
中删除它筛选为“INATIVE”的所有行
UsedRange.Offset(1)
将1添加到
UsedRange
的起始行和结束行。如果
UsedRange
包含在工作表的底行,则不允许这样做
UsedRange
包含每一行的非默认格式。例如,如果您选择了全部,然后设置字体,
UsedRange
将是整个工作表。基本上,从一个月到另一个月的范围将不同。。。更改代码以基于“INATIVE”删除第9列中的所有行,而不是进行筛选,是否更好?如果是这样的话,怎么做?