gpt4 book ai didi

vba - For 循环使用日期编译错误 : Syntax Error

转载 作者:行者123 更新时间:2023-12-04 21:53:08 24 4
gpt4 key购买 nike

我正在尝试运行一个脚本,该脚本将浏览某一列的所有行。然后它将这些列中的日期与设定的日期进行比较。如果日期大于它删除该行。我得到的错误称为编译错误:语法错误。

Sub removewrongyear()
Dim i As Integer

For i = 2 To 635475
If Data.Cells(i,20).Value > DATE(2018,12,31) Then
Rows(i).EntireRow.Delete
Next i
End Sub

最佳答案

正如@braX 所说,你需要退后一步。还指定的数量超过了 Integer可变类型容量。在 VBA 中,对于 ingeter 值,始终将变量声明为 Long 是一种很好的做法。 .

范围“数据”未设置。我引用事件工作表替换了它。
变量 YearA 也未指定。我为它分配了 2018 年的值。日期函数使用不正确,您的意思是使用 DateSerial。

总是放Option Explicit在代码之上捕获错误。这里真的很多。

Option Explicit

Sub removeWrongYear()

Dim i As Long, yearA as Long

yearA = 2018

With ActiveSheet
For i = 635475 to 2 Step -1
If .Cells(i,20).Value > DateSerial(yearA,12,31) Then .Rows(i).EntireRow.Delete
Next i
End With

End Sub

这是一个基于数组的快速版本,一次删除所有行:
Option Explicit
Option Base 1 'row and column index will match array index

Sub removeWrongYear()

Dim i As Long, yearA As Long, rowsCnt As Long
Dim rowsToDelete As Range
Dim vData As Variant

yearA = 2018

With ActiveSheet

'1st to 635475 row, 20th column
vData = Range(.Cells(1, 20), .Cells(635475, 20))

For i = UBound(vData) To 2 Step -1
If vData(i, 1) > DateSerial(yearA, 12, 31) Then
rowsCnt = rowsCnt + 1

If rowsCnt > 1 Then
Set rowsToDelete = Union(rowsToDelete, .Rows(i))
ElseIf rowsCnt = 1 Then
Set rowsToDelete = .Rows(i)
End If

End If
Next i

End With

If rowsCnt > 0 Then
Application.ScreenUpdating = False
rowsToDelete.EntireRow.Delete
Application.ScreenUpdating = True
End If

End Sub

关于vba - For 循环使用日期编译错误 : Syntax Error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50379087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com