Excel 工作表中的特定数据未正确复制到其他工作表-运行时错误1004

Excel 工作表中的特定数据未正确复制到其他工作表-运行时错误1004,excel,vba,Excel,Vba,我有一个保存数据的数据工作表。它有20列A-U,在G列中是表示dd/mm/yyyy的日期。我有一个单独的名为NoEntry的工作表,我希望用户在L15中输入日期,在L16中输入结束日期,单击按钮后,开始日期和结束日期之间的所有数据将进入另一个名为DateData的工作表 我下面的代码根本不起作用,我也不知道为什么。我得到的错误消息是:运行时错误1004: Private Sub CommandButton2_Click() Application.ScreenUpdating = False

我有一个保存数据的数据工作表。它有20列A-U,在G列中是表示dd/mm/yyyy的日期。我有一个单独的名为NoEntry的工作表,我希望用户在L15中输入日期,在L16中输入结束日期,单击按钮后,开始日期和结束日期之间的所有数据将进入另一个名为DateData的工作表

我下面的代码根本不起作用,我也不知道为什么。我得到的错误消息是:运行时错误1004:

Private Sub CommandButton2_Click()
Application.ScreenUpdating = False

Dim wsData As Worksheet, wsDate As Worksheet, wsNoEntry As Worksheet
Dim dSDate As Date, dEDate As Date
Dim lRowStart As Long, lRowEnd As Long
Dim aData() As Variant
Dim i As Long


'set the worksheet objects
Set wsData = ThisWorkbook.Sheets("Data")
Set wsDate = ThisWorkbook.Sheets("DateData")
Set wsNoEntry = ThisWorkbook.Sheets("NoEntry")

'required variables
dSDate = wsNoEntry.Range("L15").Value
dEDate = wsNoEntry.Range("L16").Value

'set the array - you can make this dynamic!
aData = wsData.Range("A1:U1000").Value

'for loop to find start
For i = 1 To 1000
    If aData(i, 7) = dSDate Then
        lRowStart = i
        Debug.Print "Start row = " & lRowStart
        Exit For
    End If
Next i

'now loop backwards to find end date
For i = 1000 To 1 Step -1
    If aData(i, 7) = dEDate Then
        lRowEnd = i
        Exit For
    End If
Next i

'now we have start and end dates
'going to use copy/ paste for simplicity
wsData.Range("A" & lRowStart, "U" & lRowEnd).Copy
'paste in date sheet
wsDate.Range("A1").PasteSpecial Paste:=xlPasteValues
'clear clipboard
Application.CutCopyMode = False

Application.ScreenUpdating = True
End Sub
任何帮助都将不胜感激, 谢谢:

试试这个:

Private Sub CommandButton2_Click()
Dim wsData As Worksheet, wsDate As Worksheet, wsNoEntry As Worksheet
Dim dSDate As Date, dEDate As Date
Dim lRowStart As Long, lRowEnd As Long
Dim aData() As Variant
Dim i As Long

Application.ScreenUpdating = False    

Set wsData = ThisWorkbook.Sheets("Data")
Set wsDate = ThisWorkbook.Sheets("DateData")
Set wsNoEntry = ThisWorkbook.Sheets("NoEntry")


dSDate = wsNoEntry.Range("L15").Value
dEDate = wsNoEntry.Range("L16").Value
j = 1

For i = 1 To 1000
    If wsData.Cells(i, 7).Value >= dSDate and wsData.Cells(i, 7).Value <= dEDate Then
        Range("A" & i & ":U" & i).Copy Destination:=wsDate.Range("A" & j)
        j = j + 1
    End If
Next i
Application.ScreenUpdating = True

End Sub

希望有帮助

在访问wsData.range a&lRowStart、U&lRowEnd.Copy时,是否检查了lRowStart和lRowEnd的值?我怀疑您的问题是您的变量没有值集检查lRowStart和lRowEnd是否有值。如果要复制,则范围应为:wsData.RangeA&lRowStart&:U&lRowEnd。Copy@Zac因此,在数据工作表中,我没有屏幕截图上显示的数据。我该怎么做dynamic@DavidGarc因此,在数据工作表中,我没有屏幕截图上显示的数据。我如何使它动态,使它只进入最后一行。抱歉,我不明白如何修复它。如果wsDatai,7>=dSDate和wsDatai,7运行时错误“438”对象不支持此属性或方法,感谢上面的代码不确定为什么会出现此错误消息抱歉。。。这是我的错。。。编辑不用担心,我现在没有收到任何错误消息,但当我单击按钮时,什么也没有发生。因此数据不会传输。@Donald放置msgbox并检查L15、L16和wsData.Cellsi,7.Value>=dSDate和wsData.Cellsi,7.Value的值