Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/31.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 条件拉动行:日期大于2013年10月31日_Excel_Vba - Fatal编程技术网

Excel 条件拉动行:日期大于2013年10月31日

Excel 条件拉动行:日期大于2013年10月31日,excel,vba,Excel,Vba,如果日期大于2013年10月31日,我希望获取所有行 Private Sub CommandButton21_Click() a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row For i = 1 To a If Worksheets("Sheet1").Cells(i, 7).Value > "10/31/2013" Then Worksheets("Sheet1").Rows(i).Co

如果日期大于2013年10月31日,我希望获取所有行

Private Sub CommandButton21_Click()

a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To a

    If Worksheets("Sheet1").Cells(i, 7).Value > "10/31/2013" Then

        Worksheets("Sheet1").Rows(i).Copy
        Worksheets("Sheet2").Activate
        b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("Sheet2").Cells(b + 1, 1).Select
        ActiveSheet.Paste
        Worksheets("Sheet1").Activate

    End If

Next

Application.CutCopyMode = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Select

End Sub
如果我使用date=10/31/2013,则我的代码有效

Private Sub CommandButton21_Click()

a = Worksheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row

For i = 1 To a

    If Worksheets("Sheet1").Cells(i, 7).Value > "10/31/2013" Then

        Worksheets("Sheet1").Rows(i).Copy
        Worksheets("Sheet2").Activate
        b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
        Worksheets("Sheet2").Cells(b + 1, 1).Select
        ActiveSheet.Paste
        Worksheets("Sheet1").Activate

    End If

Next

Application.CutCopyMode = False
ThisWorkbook.Worksheets("Sheet1").Cells(1, 1).Select

End Sub
“我的日期”列也有空值

数据快照

您的>比较无法按预期工作的原因是您在比较中提供了一个包装的字符串。如果要比较日期,请提供一个包装如下的日期:

If CDate(Worksheets("Sheet1").Cells(i, 7).Value) > #10/31/2013# Then
If CDate(Worksheets("Sheet1").Cells(i, 7).Value) > #10/31/2013# Then
    Worksheets("Sheet1").Rows(i).Copy
    b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Sheet2").Cells(b + 1, 1).Paste
End If
请注意,我还确保使用CDate将单元格中的值转换为日期数据类型

一些与您的问题不直接相关的补充意见:

您可以在代码中使用.select和.activate,但直接和对象交互是更好的做法。例如,整个If块应该更像这样:

If CDate(Worksheets("Sheet1").Cells(i, 7).Value) > #10/31/2013# Then
If CDate(Worksheets("Sheet1").Cells(i, 7).Value) > #10/31/2013# Then
    Worksheets("Sheet1").Rows(i).Copy
    b = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
    Worksheets("Sheet2").Cells(b + 1, 1).Paste
End If

日期是数值。在处理日期时使用而不是

应避免选择或激活范围


您没有正确地使用图纸限定对象,这很可能是问题所在。我修改了您的代码以正确地限定所有对象&这也会快得多,因为它只会在循环外复制/粘贴一次

例如,假设有500行符合条件范围>日期。这意味着您将有500个行实例在循环中被复制和粘贴。下面的方法将只有一个复制/粘贴实例,并且与满足条件的行数无关。要复制的行越多,您将从该解决方案中受益越多

另一种可能的解决方案是只需根据您的条件进行筛选,并仅复制/粘贴可见单元格

在评论中添加了更多标准-经过测试,在我这方面工作良好

Option Explicit

Private Sub CommandButton21_Click()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim i As Long, MyUnion As Range, LRow As Long

For i = 2 To ws.Range("A" & ws.Rows.Count).End(xlUp).Row
    If ws.Range("G" & i) > #10/31/2013# Or ws.Range("AA" & i) = "Investigate" Or ws.Range("AA" & i) = "Leave Open" Then
        If Not MyUnion Is Nothing Then
            Set MyUnion = Union(MyUnion, ws.Range("G" & i))
        Else
            Set MyUnion = ws.Range("G" & i)
        End If
    End If
Next i

If Not MyUnion Is Nothing Then
    With ThisWorkbook.Sheets("Sheet2")
        LRow = .Range("A" & .Rows.Count).End(xlUp).Offset(1).Row
        MyUnion.EntireRow.Copy .Range("A" & LRow)
    End With
End If

End Sub
前后


我们没有你的任何数据。我们应该如何回答这个问题?如果工作表上的日期格式为日期,则需要在代码中使用日期,而不是字符串。Option Explicit Option Explicit Option Explicit Option。请将其添加到代码的顶部。您有未声明的变量,这将向您显示上面所有内容的确切位置是,但您的>未按预期工作的原因是,您在比较中提供了一个封装的字符串。如果要比较日期,请提供这样一个日期:如果工作表sheets1.Cellsi,7.Value>10/31/2013,则在排除故障时…未工作不是一个有用的解释。你的电脑会自动燃烧吗?你有错误吗?什么都没发生吗?是否复制了错误的内容?我确实将日期列转换为日期数据类型,但在使用您的代码后,我在sheet2中没有得到任何结果。在我的帖子中,我还添加了一个数据快照作为参考。我还想在Sheet2的开头插入几列,当宏根据您上次在上述代码中帮助我的条件从Sheet1复制数据时。这与本文无关。如果让问题不断演变,这个网站永远不会有最终答案。你需要发布一个新问题,因为这不是原来的问题