如何修复编译错误:VBA中未定义子或函数?
这是一个代码,它遍历中B列中的单元格。如果它在B列中找到一个不是日期的值,则会复制该值,将其粘贴到另一个名为“errors”的工作表中,然后从Sheet2中删除该行。然而,每当我尝试运行它时,就会得到一个“编译错误:未定义子或函数”。我在这上面看到了一些其他的帖子,但是上面没有提到对我有用的东西如何修复编译错误:VBA中未定义子或函数?,vba,Vba,这是一个代码,它遍历中B列中的单元格。如果它在B列中找到一个不是日期的值,则会复制该值,将其粘贴到另一个名为“errors”的工作表中,然后从Sheet2中删除该行。然而,每当我尝试运行它时,就会得到一个“编译错误:未定义子或函数”。我在这上面看到了一些其他的帖子,但是上面没有提到对我有用的东西 Sub removeerrors() Dim i As Range Dim x As Double x = Worksheet("Errors").CountA("A1:A100") For
Sub removeerrors()
Dim i As Range
Dim x As Double
x = Worksheet("Errors").CountA("A1:A100")
For Each i In Worksheet("Sheet2").Range(Range("A2"), Range("A2").End(xlDown))
If IsDate(i.Offset(0, 1)) = False Then
Range(i, i.End(xlToRight)).Copy
Worksheet("Errors").Range("A1").Offset(x, 0).Paste
Range(i).EntireRow.Delete
End If
Next i
End Sub
您只需将
工作表
更改为工作表
,最后加上“s”
Sub removeerrors()
Dim i As Range
Dim x As Double
x = Worksheets("Errors").CountA("A1:A100")
For Each i In Worksheets("Sheet2").Range(Range("A2"), Range("A2").End(xlDown))
If IsDate(i.Offset(0, 1)) = False Then
Range(i, i.End(xlToRight)).Copy
Worksheets("Errors").Range("A1").Offset(x, 0).Paste
Range(i).EntireRow.Delete
End If
Next i
End Sub
脚本中还可能出现一些其他错误/更改
s
添加到工作表选项Explicit
Application.WorksheetFunction.CountA
Counta
即Application.WorksheetFunction.Counta(工作表(“错误”).range(“A1:A100”)
,确保使用正确的范围
.Cells(.Rows.Count,“A”).End(xlUp).row
从工作表底部向上移动来确定最后一行,或者可以循环到工作表底部i.EntireRow.delete
.Range(i,i.End(xlToRight))。复制工作表(“错误”)。Range(“A1”)。Offset(x,0)
End(xlToRight)
,以防在工作表的最右侧结束使用完全限定的范围引用 删除行时向后循环 更新目标工作表粘贴行索引 如下
Option Explicit
Sub removeerrors()
Dim iRow As Long
Dim x As Double
x = Worksheets("Errors").CountA("A1:A100")
With Worksheets("Sheet2") ' referecne "Sheet2" sheet
With .Range(.Range("A2"), .Range("A2").End(xlDown)) ' reference referenced sheet range from cell A2 down to next not empty one
For iRow = .Rows.Count To 1 Step -1 ' loop reference range backwards from its last row up
If Not IsDate(.Cells(iRow, 2)) Then ' if referenced range cell in column B current row is not a date
.Range(.Cells(iRow, 1), .Cells(iRow, 1).End(xlToRight)).Copy Destination:=Worksheets("Errors").Range("A1").Offset(x, 0) ' copy referenced range current row spanning from column A to next not empty column and paste it to sheet "Errors" column A row x
x = x + 1 ' update offset
.Rows(1).EntireRow.Delete ' delete referenced range current row
End If
Next
End With
End With
End Sub
Option Explicit
Sub removeerrors()
Dim iRow As Long
Dim x As Double
x = Worksheets("Errors").CountA("A1:A100")
With Worksheets("Sheet2") ' referecne "Sheet2" sheet
With .Range(.Range("A2"), .Range("A2").End(xlDown)) ' reference referenced sheet range from cell A2 down to next not empty one
For iRow = .Rows.Count To 1 Step -1 ' loop reference range backwards from its last row up
If Not IsDate(.Cells(iRow, 2)) Then ' if referenced range cell in column B current row is not a date
.Range(.Cells(iRow, 1), .Cells(iRow, 1).End(xlToRight)).Copy Destination:=Worksheets("Errors").Range("A1").Offset(x, 0) ' copy referenced range current row spanning from column A to next not empty column and paste it to sheet "Errors" column A row x
x = x + 1 ' update offset
.Rows(1).EntireRow.Delete ' delete referenced range current row
End If
Next
End With
End With
End Sub