提取和复制Excel文件中的数据

我正在提取数据froman excel文件,在提供的date参数内。 但是这个代码不工作。 有人可以帮我弄清楚这个?

Set src = wb.Sheets("Request Log Extract") Set dest = ThisWorkbook.Sheets("Resolution Time Performance") srcRow = src.Cells(src.Rows.Count, "K").End(xlUp).Row destRow = dest.Cells(dest.Rows.Count, "E").End(xlUp).Row + 1 wb.Activate For i = 2 To srcRow If src.Cells("K" & i) >= txtStartDate.Value Or src.Cells("K" & i) <= .txtEndDate.Value Then src.Cells("K" & i).Copy dest.Activate dest.Cells("E" & i).Paste src.Activate End If Next 

这返回一个错误说:

无效的过程调用或参数。

注意

txtStartDate和txtEndDate是datetypes。

如果在If条件中使用OR ,则所有数据都被复制,但是如果我使用了, 并且没有数据被复制。 我不知道发生了什么事。

VALUES

txtStartDate 05/13/2016 txtEndDate 05/18/2016 k2 05/14/2016

我不知道你的txtStartDate和txtEndDatevariables,但看看我的代码我宣布你的variables,但请指定datetypes,我也删除点从txtEndDate和更改单元格引用,现在它的工作原理。

 Sub extractData() Dim src Dim dest Dim wb As Workbook Set wb = ThisWorkbook Dim txtStartDate Dim txtEndDate Set src = wb.Sheets("Request Log Extract") Set dest = ThisWorkbook.Sheets("Resolution Time Performance") srcRow = src.Cells(src.Rows.Count, "K").End(xlUp).Row destRow = dest.Cells(dest.Rows.Count, "E").End(xlUp).Row + 1 txtStartDate = 0 txtEndDate = 100 For i = 2 To srcRow If src.Cells(i, "K").Value > txtStartDate Or src.Cells(i, "K").Value < txtEndDate Then src.Cells(i, "K").Copy dest.Activate dest.Cells(i, "E").PasteSpecial src.Activate End If Next End Sub 

我认为这是一个date值问题

此外,我猜你的代码是在一些用户窗体中,并在点击某个button后激活,它必须将两个文本框的值与一些单元格内容进行比较,并相应地复制/粘贴值

如果我的猜测是正确的(手指交叉…)试试这个:

 Option Explicit Private Sub CommandButton1_Click() Dim src As Worksheet, dest As Worksheet Dim srcRow As Long, destRow As Long, i As Long Dim startDate As Date, endDate As Date, cellDate As Date With Me If Not ValidateDate("txtStartDate", .txtStartDate.Value, startDate) Then Exit Sub If Not ValidateDate("txtEndDate", .txtEndDate.Value, endDate) Then Exit Sub Set src = ActiveWorkbook.Sheets("Request Log Extract") '<~~ change workbook reference as per your need Set dest = ThisWorkbook.Sheets("Resolution Time Performance") srcRow = src.Cells(src.Rows.Count, "K").End(xlUp).Row destRow = dest.Cells(dest.Rows.Count, "E").End(xlUp).Row + 1 For i = 2 To srcRow If ValidateDate("src.Range(""K" & i & """)", src.Range("K" & i), cellDate) Then If cellDate >= startDate And cellDate <= endDate Then src.Range("K" & i).Copy dest.Range("E" & i) End If Next End With End Sub Function ValidateDate(textName As String, textValue As String, retDate As Date) As Boolean ValidateDate = IsDate(textValue) If ValidateDate Then retDate = DateValue(textValue) Else MsgBox textValue & " is not a valid date" & vbCrLf & "please input a new value for " & textName End If End Function 

如果我的猜测是错误的,仍然上面的代码可以给你一些关于date值问题的build议

此代码正在为我工​​作:

 Sub Demo() Dim wb As Workbook Dim txtStartDate As Date, txtEndDate As Date Set wb = ActiveWorkbook Set src = wb.Sheets("Request Log Extract") Set dest = wb.Sheets("Resolution Time Performance") srcRow = src.Cells(src.Rows.Count, "K").End(xlUp).Row destRow = dest.Cells(dest.Rows.Count, "E").End(xlUp).Row + 1 txtStartDate = "05/13/2016" txtEndDate = "05/18/2016" For i = 2 To srcRow If src.Range("K" & i).Value >= txtStartDate And src.Range("K" & i).Value <= txtEndDate Then src.Range("K" & i).Copy Destination:=dest.Range("E" & i) End If Next End Sub