VBA - копирование и вставка цикла на основе значения ячейки с датой - PullRequest
0 голосов
/ 02 ноября 2018

Я работаю с данными, извлеченными из PDF в Excel. Я пытаюсь создать макрос, который будет проверять ввод даты на вкладке «Руководство» и копировать данные всех строк с соответствующей датой с одного листа на другой.

Sub Copy()

Dim lastrow As Long
Dim myRow As Long
Dim myCopyRow As Long
Dim Data As Worksheet
Dim Form As Worksheet

Set Data = Sheets("PDF Data ")
Set Form = Sheets("Formula")

myCopyRow = 2


lastrow = Data.Cells(Data.Rows.Count, "A").End(xlUp).Row

Application.ScreenUpdating = False


With Data
    For myRow = 1 To lastrow
        If Data.Cells(myRow, "A") = Sheets("Guide").Cells(C3) Then
        Data.Cells(myCopyRow, "B") = Form.Cells(myRow, "A")

        myCopyRow = myCopyRow + 1
    End If
Next


End With

Application.ScreenUpdating = True
Application.CutCopyMode = False

End Sub

при отладке получаю следующее:

"Ошибка времени выполнения" 1004 ": ошибка приложения или объекта2"

для строки:

Если Data.Cells (myRow, "A") = Sheets ("Guide"). Ячейки (C3) Тогда

Данные, которые я пытаюсь сравнить, являются датами. Дата ввода пользователя в «Руководстве» распознается и форматируется Excel как короткая дата, однако дата на Листе 1 первоначально распознается как строка текста, поскольку она разбивается по формуле из более крупной строки. Сначала я думал, что это проблема, поэтому попытался переформатировать без удачи.

Я надеюсь, что кто-то может взглянуть и сообщить мне, если что-то не так с вышеуказанным кодом, и подтвердить, что обе ячейки с обеими должны быть распознаны как даты? и может ли VBA конвертировать их перед проверкой?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Если вы хотите использовать метод Cells, вам нужен следующий синтаксис:

Worksheets("Guide").Cells(3,"C") 
0 голосов
/ 02 ноября 2018

Для ошибки времени выполнения VBA - если вы хотите сравнить значение со значением в ячейке C3, используйте метод Range вместо метода Cells:

If Data.Cells(myRow, 1).value = Sheets("Guide").Range("C3").value Then

Для сравнения дат вы можете конвертировать значения в даты, используя CDate

If CDate(Data.Cells(myRow, 1).value) = CDate(Sheets("Guide").Range("C3").value) Then

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...