Сравните две ячейки, если они равны, удалите и замените

Я отправляю данные из одной книги в другую. Мой макрос копирует и вставляет данные в документ основных данных, в котором хранятся все мои данные. После вставки макрос возвращается и устанавливает все мои значения в 0 перед сохранением и закрытием.

sub send()

Workbooks.Open "C:\Users\BB"
Worksheets("CC").Activate

Workbooks("AA").Activate

Worksheets("AA").Range("A3:F19").Copy

Workbooks("BB").Activate

ActiveSheet.Paste Destination:=Worksheets("CC").Range("A" & Rows.Count).End(xlUp).Offset(1, 0)

ActiveWorkbook.Save
ActiveWorkbook.Close

Workbooks("AA").Activate

Range("C3:E19").Value = 0

ActiveWorkbook.Save
ActiveWorkbook.Close

End Sub

Мне нужен код, чтобы проверить, равна ли дата в последней строке столбца F в моей рабочей книге основных данных текущей дате в месяце и году.

Если они равны, удалите все с этой датой и замените новыми данными.


person anp    schedule 07.01.2016    source источник


Ответы (2)


вы можете попробовать использовать функцию datediff, например:

 ' Index run through a column
 For Index = 3 To 19
      If DateDiff(Now, ActiveSheet.Cells(Index, 5)) = 0 Then
         ' Replace here your new data
      End If
 Next
person dudu721    schedule 07.01.2016

Я удалю свой «первый ответ», но вот мой реальный ответ для проверки:

Sub Send() 'asuming that this Sub is located in the "OriData"-Workbook
    Dim OriData As Workbook
    Set OriData = ThisWorkbook

    Dim MasterData As Workbook
    Set MasterData = Workbooks.Open("C:\Users\BB")

    Dim ODSht As Worksheet
    ODSht = OriData.Sheets("AA")


    Dim MDSht As Worksheet
    MDSht = MasterData.Sheets("CC")

    Dim LastRow As Long
    LastRow = MDSht.Cells(MDSht.Rows.Count, "a").End(xlUp).Row  'Last Row in Masterdata which contains data in Column a

    Dim NewDate As Date
    NewDate = MDSht.Cells(LastRow, 6)   'Last row, column F

    If month(Date) = month(NewDate.Value) And Year(Date) = Year(NewDate.Value) Then

Возможно, вам придется удалить .Value после NewDate (вам придется попробовать).

Поскольку я не уверен, что именно вы хотите удалить, я напишу код, который удаляет всю строку в мастер-данных, где в столбце F дата (месяц и год) соответствует дате «сегодня»:

        MDSht.Row(LastRow).Delete

Если вы хотите удалить более одной строки, вам придется соответствующим образом изменить код, но, возможно, это вам немного поможет.

    End If

    MasterData.Save
    MasterData.Close

Почему в вашем коде диапазон, который вы копируете (A3: F19), и диапазон, который вы устанавливаете на 0 (C3: E19), не совпадают?

    OriData.Activate
    ODSht.Range("A3:F19").Value = 0

    OriData.Save
    OriData.Close
End Sub

Если бы вы сделали функцию из LastRow и NewDate, вы могли бы зациклить ее с новыми данными для управления каждый раз без дальнейших осложнений:

Function LastRow(WS As Worksheet)
    LastRow = WS.Cells(WS.Rows.Count, "A").End(xlUp).Row
End Function

Function NewDate(Sht As Worksheet, R As Long)
    NewDate = Sht.Cells(R, 6).Value
End Function

Следуя условию If из предыдущего:

For DRow = 1 To LastRow(MDSht)
    If (month(Date) = month(NewDate(MDSht, DRow))) And (Year(Date) = Year(NewDate(MDSht, DRow))) Then
        MDSht.Row(DRow).Delete
    ElseIf DRow = LastRow(MDSht)
        MsgBox "Finished", vbokOnly
        Exit Sub
    End If
Next DRow

Скажите, получилось ли, а что нет (мне интересно знать, и я могу узнать больше из этого), спасибо :)

person Kathara    schedule 13.01.2016