Сравнить меньше, чем сегодня, дата и автозаполнение - PullRequest
0 голосов
/ 13 февраля 2020

Нужна помощь с моим кодом. У меня две проблемы.

  1. 1-й выпуск - я пытаюсь сделать мой код равным l oop, если заполнить пустую ячейку и дату в столбце 1 меньше, чем сегодняшняя дата
    And .Cells(rw, 1) < Format(dt, "dd-mmm")
    но эта <сегодняшняя дата не может работать. Макрос все еще продолжается, даже если дата больше сегодняшней даты </p>

  2. Во 2-м выпуске я хотел бы выполнить автозаполнение от столбца 5 до 9 из предыдущей строки. Я сохраняю ошибку дальности встречи
    Set rng = .Range(.Cells(rw - 1, 5), .Cells(rw, 9)) Selection.AutoFill Destination:=rng, Type:=xlFillDefault
    и
    Selection.AutoFill Destination:=Range(.Cells(rw - 1, 5), .Cells(rw 1, 5)), Type:=xlFillDefault

Sub DataGrab()
Dim rw As Long, x As Range, rng As Range
Dim extwbk As Workbook, twb As Workbook

Set twb = ThisWorkbook
Set extwbk = Workbooks.Open("D:\Users\Desktop\Report " & Format(Now, "DD-MMM-YYYY") & ".xls")
Set x = extwbk.Worksheets("Summary").Range("A4:AF100")

dt = Date

With twb.Sheets("Sheet1")
    For rw = 3 To .Cells(Rows.Count, 1).End(xlUp).Row
        If .Cells(rw, 2) = "" And .Cells(rw, 1) < Format(dt, "dd-mmm") Then
            .Cells(rw, 2) = Application.VLookup(.Cells(rw, 1).Value2, x, 23, False)
            .Cells(rw, 3) = Application.VLookup(.Cells(rw, 1).Value2, x, 29, False)
            .Cells(rw, 4) = Application.VLookup(.Cells(rw, 1).Value2, x, 31, False)
            Set rng = .Range(.Cells(rw - 1, 5), .Cells(rw, 9))
            Selection.AutoFill Destination:=rng, Type:=xlFillDefault
            'Selection.AutoFill Destination:=Range(.Cells(rw - 1, 5), .Cells(rw 1, 5)), Type:=xlFillDefault
        End If
    Next rw
End With
extwbk.Close savechanges:=False
End Sub

Ответы [ 2 ]

0 голосов
/ 13 февраля 2020

Попробуйте изменить .Cells(rw, 1) < Format(dt, "dd-mmm") на .Cells(rw, 1) < CLng(dt). Excel не заботится о формате даты. Сохраняет и оперирует датой как Long.

0 голосов
/ 13 февраля 2020

(так как я не могу комментировать, я сделаю это через ответ)

прежде всего вы должны добавить Option Explicit в начале вашего модуля. (это вынуждает вас создавать переменные, прежде чем вы дадите им значение)

далее у вас есть .Cells(rw, 2) = " " Я полагаю, вы пытаетесь получить значение этой ячейки?

, если вы добавите MsgBox .Cells(rw, 2), в вашем коде вы видите, что он не будет возвращать значение этой ячейки. вот почему вам нужно использовать .Cells(rw, 2).Value

Кроме того, мы не проверяем пустую ячейку с " ", но с if IsEmpty(.Cells(rw, 2).Value)

это должно сделать вас sh справа направление :)

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