Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.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
Excel 将日期与组合框设置进行比较&;删除特定日期范围之间的行_Excel_Vba - Fatal编程技术网

Excel 将日期与组合框设置进行比较&;删除特定日期范围之间的行

Excel 将日期与组合框设置进行比较&;删除特定日期范围之间的行,excel,vba,Excel,Vba,你好 谢谢你最近对我的支持。我正在使用excel工作表(图片附在这里),这里我有大约60k行重复a列中的相同日期。实际上我需要做的是通过用户表单选择开始日期和结束日期(可以在图片中看到)。当单击“确定”按钮时,应删除日期超出给定日期范围的其余行。 但是我的代码并没有完全按照我想要的那样工作&删除了一些在范围内的行。我承认可能有我的错误,但经过这么多的努力,我没有发现。而且组合框中的日期重复了很多次&没有排序。请仔细阅读下面的代码- Private Sub CancelButton_Click()

你好

谢谢你最近对我的支持。我正在使用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
Private Sub-CancelButton\u Click()
卸载UserForm1
端接头
专用子组合框1_Change()
ComboBox1.Value=格式(ComboBox1.Value,“dd-mmm-yyyy”)
端接头
专用子组合框2_Change()
ComboBox2.Value=格式(ComboBox2.Value,“dd-mmm-yyyy”)
端接头
私有子按钮点击()
Dim i为双精度,dt1为字符串,dtt1为字符串
Dim dt2作为字符串,dtt2作为字符串
将ws标注为工作表,将lRow标注为长
设置ws=ActiveWorkbook.Sheets(1)
与ws
lRow=.Range(“A”&.Rows.Count).End(xlUp).Row
以
dt1=ComboBox1.Value
dtt1=CDate(dt1)
dt2=ComboBox2.Value
dtt2=CDate(dt2)
Application.ScreenUpdating=False
对于i=2至lRow
如果范围(“A”&i).Value>=dtt1,范围(“A”&i).Value而不是

For i = 2 To lRow
试一试

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

而不是

For i = 2 To lRow
试一试


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

谢谢回复,我尝试了您的建议,但这一建议也没有任何效果。我认为A列中包含日期的组合框或单元格可能有任何问题。当我从组合框中选择日期时,某个地方的日期格式正在更改,并且与条件不匹配。请您检查代码。或者我可以向您发送我的文件吗?在您这样做之前(我注意到另一件事),请将您的
dtt1
dtt2
声明为
Date
,而不是
String
,然后重试。谢谢,我的代码现在正在工作,但是如果条件不工作,“and”操作符处于工作状态。如果Range(“A”&i).Value>=dtt1,Range(“A”&i).Value=dtt1,则它可以工作。“AND”的用法有错误吗。或者发生了其他问题。它不工作是因为它生成了运行时错误?或者根本不想让它做什么?是的,它实际上并没有做我想让它做的事情。有时它会删除其他行或不执行任何操作:-(感谢回复,我尝试了你的建议,但这一建议也没有发生任何变化。我认为A列中包含日期的组合框或单元格可能有任何问题。当我从组合框中选择日期时,某个地方的日期格式正在更改,并且与条件不匹配。请检查代码。或者我可以向你发送我的文件吗?在您之前。)这样做(我注意到另一件事)将您的
dtt1
dtt2
声明为
Date
,而不是
String
,然后重试。感谢我的代码现在正在工作,但是“and”操作符在if条件下不工作。if Range(“A”&I)。Value>=dtt1和Range(“A”&I)。Value=dtt1就可以工作了。“AND”的用法有错误吗。或者发生了其他问题。它不工作是因为它生成了运行时错误?或者根本不想让它做什么?是的,它实际上并没有做我想让它做的事情。有时它会删除其他行或不执行任何操作:-(