Мой ответ может показаться немного конкретным, но я думаю, что из него вы можете, по крайней мере, понять, к чему я клоню.
Вот что я рассматриваю в качестве «основного» листа.В этом примере он не обновлялся со вчерашнего дня (следовательно, дата 9/12/2018
).
Вот таблица с сегодняшними данными:
Следующий скрипт возьмет сегодняшние данные, добавит к нему столбец "Date"
и заполнит сегодняшнюю дату для всех этих строк.Затем он скопирует данные из листа «сегодня» на «мастер» лист вверху списка.
Sub Data_Copy()
Dim ws1 As Worksheet
Set ws1 = ActiveSheet 'adjust as necessary
Dim ws2 As Worksheet
Set ws2 = sheets(ws1.index + 1) 'adjust as necessary
Dim lastRow As Long
lastRow = ws2.Range("A" & rows.count).End(xlUp).row
If ws2.Range("A1").Value2 <> "Date" Then
ws2.Columns(1).Insert Shift:=xlRight
ws2.Range("A1").Value2 = "Date"
ws2.Range("A2:A" & lastRow).value = Date
End If
ws2.rows("2:" & lastRow).copy
ws1.rows(2).Insert Shift:=xlDown
Application.CutCopyMode = False
End Sub
Данные в листе «сегодня» после того, как предыдущий скрипт добавил "Date"
колонка:
И вот этот «основной» лист после того, как в него были вставлены сегодняшние данные:
Наконец, вот обновленная подпрограмма Mail_Sheet_Outlook_Body
, так что она захватывает только данные с сегодняшней датой из ActiveSheet
(которую я ранее называл 'master').
Теперь он работает вниз по столбцуA
и получает номер строки, когда не находит в этой ячейке сегодняшнюю дату.Затем он устанавливает rng
для перехода от "A1"
к последнему столбцу в UsedRange
и к последней строке с текущей датой.
Sub Mail_Sheet_Outlook_Body()
...
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
'gets last row with today's date
Dim i As Long
For i = 2 To Range("A" & rows.count).End(xlUp).row
If CDate(Range("A" & i).value) <> Date Then
Exit For
End If
Next i
'makes range out of today's cells
Set rng = Range(Cells(1, "A"), Cells(i - 1, ActiveSheet.UsedRange.Columns.count))
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
...
End Sub
Function RangetoHTML(rng As Range)
...
End Function