【问题标题】:compare date with combo box setection & delete rows between specific date range将日期与组合框选择进行比较并删除特定日期范围之间的行
【发布时间】:2017-03-15 05:00:02
【问题描述】:

你好,

感谢您最近对我的支持。我正在使用 excel 表(图片附在此处),在这里我有大约 60k 行在 A 列中重复相同的日期。实际上我需要做的是通过用户表单选择开始日期和结束日期(可以在图像中看到) .何时单击“确定”按钮,应删除日期超出给定日期范围的其余行。 但我的代码并没有完全按照我的意愿工作并删除了该范围内的一些行。我承认可能有我的错误,但经过这么多努力我还是找不到。而且组合框中的日期也重复了很多次并且没有排序。请仔细阅读下面的代码-

Private Sub CancelButton_Click()
Unload UserForm1
End Sub

Private Sub ComboBox1_Change()
ComboBox1.Value = Format(ComboBox1.Value, "dd-mmm-yyyy")
End Sub

Private Sub ComboBox2_Change()
ComboBox2.Value = Format(ComboBox2.Value, "dd-mmm-yyyy")
End Sub

Private Sub okButton_Click()
Dim i As Double, dt1 As String, dtt1 As String
Dim dt2 As String, dtt2 As String
Dim ws As Worksheet, lRow As Long
Set ws = ActiveWorkbook.Sheets(1)
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
dt1 = ComboBox1.Value
dtt1 = CDate(dt1)
dt2 = ComboBox2.Value
dtt2 = CDate(dt2)
Application.ScreenUpdating = False
For i = 2 To lRow
If Range("A" & i).Value >= dtt1 And Range("A" & i).Value <= dtt2 Then
     Rows(i).Select
     Selection.Delete
     i = i - 1
End If
Next
Application.ScreenUpdating = True
Unload UserForm1
End Sub

Private Sub UserForm_Initialize()
Set ws = ActiveWorkbook.Sheets(1)
With ws
lRow = .Range("A" & .Rows.Count).End(xlUp).Row
End With
ComboBox1.RowSource = "A2:A" & lRow
ComboBox2.RowSource = "A2:A" & lRow
End Sub

非常感谢。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    代替

    For i = 2 To lRow
    

    试试

    For i = lRow To 2 step -1
    

    请注意:我没有检查您的其余代码,因为这可能是问题所在;当您想通过 VBA 删除电子表格上的行(或列)时,从下到上(如果您正在处理列,则从右到左)始终是一个很好的过程。

    【讨论】:

    • 感谢回复 我尝试了您的建议,但这个也没有任何反应。我认为 A 列中包含日期的组合框或单元格可能存在任何问题。当我从组合框中选择日期时,日期格式正在更改且不符合条件。要求您检查代码。或者我可以把我的文件发给你吗?
    • 在你这样做之前(我注意到另一件事)将你的dtt1dtt2 声明为Date,而不是String,然后再试一次。
    • 感谢我的代码现在可以正常工作,但是如果条件中的“AND”运算符不起作用。 If Range("A" & i).Value >= dtt1 And Range("A" & i).Value = dtt1 then )有用。 “AND”的使用有什么错误吗?或者那里发生了其他问题。
    • 它不工作,因为它会产生运行时错误?或者根本不希望你想要它这样做?
    • 是的,它实际上并没有按照我的意愿去做。有时它会删除其他行或什么也不做。 :-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-18
    相关资源
    最近更新 更多