2016-05-26 2 views
2

Я извлекаю данные из файла excel, который находится внутри параметра дат. Но этот код не работает. Кто-нибудь может помочь мне понять это?Извлечение и копирование данных в файле excel

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 типы даты.

Если я использую ИЛИ в условии, если все данные были скопированы, но если бы я использовал И, никакие данные не копируются. Я не знаю, что происходит.

ЗНАЧЕНИЯ

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

+0

Is 'srcRow'> = 2? Является ли 'wb' правильной книгой и открыта? Является 'txtStartDate.Value' <=' txtEndDate.Value'? Вы в правильном выражении 'With'? ('txtEndDate' имеет ведущую точку) ... Вы получаете сообщения об ошибках? –

+1

Пара вещей здесь. Во-первых, 'src.Cells (« K »& i)' неверно. Или используйте 'src.Range (« K »& i)» или 'src.Cells (i, 11)' где '11' представляет столбец' K'. Во-вторых, вы можете вставить с помощью 'src.Range (« K »& i) .Copy Destination: = dest.Range (« E »& i)' – Mrig

+0

@DirkReichel Вопрос теперь обновлен. и wb уже открыт и активен. – kruk22

ответ

0

Im не уверен, что с переменным txtStartDate и txtEndDate, но посмотреть на мой код Я объявил ваши переменные, но, пожалуйста, укажите типы дат, также я удалил точку с 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 
0

Я думаю, что это вопрос валютирования

Кроме того, я предполагаю, ваш код находится в пределах некоторой UserForm панели и активировал в какой-то нажатии кнопки, после чего он должен сравнить два текстовых значение, некоторые клетки содержания и значения копирования/вставок соответственно

должны мое угадывание быть правыми (палец пересекла ...) попробовать это:

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 

должен мое угадывание неправильно, по-прежнему код выше, может дать вам несколько советов, как на дату эмиссии значение

+0

@ kruk22 этот код является «UserForm-ready». Должно быть не так много, чтобы учиться, но правильно вставляя его в обработчик событий UserForm – user3598756

+0

, вы прошли через вашу проблему? – user3598756

0

Этот код работает для меня:

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 
+0

вы пробовали его с помощью UForm? Благодаря! – kruk22

+0

@ kruk22 - Нет! – Mrig

+0

@ kruk22 вы пробовали мой код ответа? который я на самом деле написал _guessing_, он должен быть в среде UserForm. – user3598756

Смежные вопросы