Обновить начальную дату на один день до даты окончания, когда будут зарегистрированы соответствующие данные за каждый день в диапазоне дат

Я пытаюсь обновить дату и одновременно записать каждую отдельную дату и ее соответствующий счет z на отдельном листе. Мой файл excel уже настроен так, что с изменением даты соответствующие значения z для обновления дня. Может ли кто-нибудь помочь мне написать код VBA, который компилирует дату с соответствующими данными за каждый день в диапазоне дат? В идеале, я хочу, чтобы код корректировался для даты начала и окончания даты, когда он изменяется непосредственно на листе excel. К сожалению, я не могу обновить дату на один день, не предварительно настроив ее на определенный день, поскольку для «следующей» части кода возникает ошибка, требующая ошибки.

Sub compliedataloop() Dim wb As Workbook Set wb = ActiveWorkbook Dim wsprecip As Worksheet Set wsprecip = wb.Worksheets("Precip") Dim wshistoricaldata As Worksheet Set wshistoricaldata = wb.Worksheets("Historical Data") Dim nextday As String Set nextday = wb.wsprecip.Range("CJ4") wb.wshistoricaldata.Range("C4").Activate wb.wsprecip.Range("CJ4").Activate ActiveCell.Copy wb.wshitoricaldata.Activate ActiveCell.PasteSpecial ActiveCell.Offset(1, 0).Activate wb.wsprecip.Range("CN37").Activate ActiveCell.Copy wb.wshistoricaldata.Activate ActiveCell.PasteSpecial ActiveCell.Offset(-1, 1).Activate wb.wsprecip.Range("CJ4").Activate nextday.DateAdd = ("d") Do While Enddate = False 'select, copy and paste first Date from cell CJ5 in "precip" Worksheet to "historicaldata" worksheet wb.wsprecip.Range(CJ4).Activate ActiveCell.Copy wb.wshistoricaldata.Activate ActiveCell.PasteSpecial ActiveCell.Offset(1, 0).Activate wb.wsprecip.Range("CJ4").Activate nextday.DateAdd = ("d") 'copy new z-score for new date and paste data into "historicaldata" worksheet wbs.wsprecip.Range("CN37").Activate ActiveCell.Copy wb.wshistoricaldata.Activate ActiveCell.Offset(0, 1).Activate ActiveCell.PasteSpecial 'reset positioning for next day's date in one cell above and to the right ActiveCell.Offset(-1, 1).Activate If Enddate = 2 / 28 / 2018 Then Enddate = True End If End Sub 

Я не знаю, с чего начать …

Убедитесь, что у вас есть Option Explicit в качестве первой строки в модуле. Это потребует от вас определения всех ваших переменных, что останавливает вас от случайного wbs ( wbs ) или с помощью переменных ( Enddate ), которым не присвоено значение.

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

Вы определили следующий nextday как строку. Строка не является объектом, поэтому возникает «ошибка, связанная с объектом».

Если все, что вы делаете, добавляет день, вам не нужна функция DateAdd , просто добавьте 1 .

Вам не нужно использовать какие-либо .Activate , .copy или .PasteSpecial чтобы просто скопировать значение из одной ячейки в другую.

Я не могу точно понять, что вы делаете; особенно с вашей датой окончания. Вы пытаетесь сделать этот запуск один раз в день и продолжать писать в следующий столбец? Если это так, вам нужно обработать последний столбец следующим образом:

 Public Function LastColumn(Optional Row As Integer = 1, Optional Sheet As Excel.Worksheet) As Long If Sheet Is Nothing Then Set Sheet = Application.ActiveSheet LastColumn = Sheet.Cells(Row, Sheet.Columns.Count).End(xlLeft).Row End Function 

Установите ячейку в пустую ячейку (смещение) после последней ячейки в строке 4:

 Set cell = LastColumn(4, wb.wsHistoricalData).offset(0,1) 

Во всяком случае, вот что ваш код примерно выглядит, когда исправлено …

 Option Explicit Sub ComplieDataLoop() Dim wb As Workbook Dim wsPrecip As Worksheet Dim wsHistoricalData As Worksheet Dim NextDay As Date 'Dim EndDate As Date??? Dim cell As Range Set wb = ActiveWorkbook Set wsPrecip = wb.Worksheets("Precip") Set wsHistoricalData = wb.Worksheets("Historical Data") NextDay = wb.wsPrecip.Range("CJ4") 'EndDate = ??? Set cell = wb.wsHistoricalData.Range("C4") Do While EndDate < DateSerial( 2018, 2, 28) cell = wb.wsPrecip.Range("CJ4") Set cell = Offset(-1, 0) cell = wb.wsPrecip.Range("CN37") 'reset positioning for next day's date in one cell above and to the right Set cell = Offset(-1, 1) 'EndDate = ??? Loop End Sub 
  • Скопируйте диапазон значений в зависимости от даты в другом столбце
  • Диапазон индексов соответствия индексу Excel и возврат SUM совпадений
  • Скорость поиска с индексом / совпадением с двумя критериями, включая один диапазон дат
  • VBA - Проверка правильности строки даты
  • VBA: Как сохранить только значения даты из строки?
  • Как получить конкретную строку с тем же месяцем и получить ее значение для суммы
  • VBA, чтобы проверить, существует ли текст в текстовом поле, а затем проверить, находится ли дата в правильном формате
  • Проблемы с чтением таблицы Excel с использованием LinqToExcel, когда задействованы даты
  • Функция VBA Match, использующая сегодняшнюю дату для поиска входа в прошлом году
  • VBA конвертирует дату в число, основанное на вводе текстового поля
  • Даты в Excel форматируются как ММ-ДД-ГГГГ, но Excel распознается как DD-MM-YYYY
  • Interesting Posts

    Создание вкладок в CSV с использованием TCOM

    Как получить значение ячейки в проекте excel workbook с помощью c #?

    динамически открывать поле ввода в excel с VBA

    Как получить данные, прочитанные из файла excel и отображаемые на мой взгляд?

    Копирование результатов таблицы с несколькими столбцами

    vba скачать excel workbook с url и сохранить на диск?

    Как выбрать первый (второй, …) непустой элемент в списке Excel?

    Как анализировать только текстовый ввод в Excel или есть ли какое-либо программное обеспечение для этого?

    Раскрыть функциональность VSTO для VBA без локального администратора

    (Возможно) Простая команда – Excel

    Dynamicaly Build Python списки из таблиц в книге Excel

    В Qtp при печати значения в локальном столбце листа из глобального листа только последнее значение строки получает priint

    Почему текст подсказки не отображается для моего InputBox с использованием VBA в Excel для Mac?

    Отображать строки на основе числового значения в ячейке

    Совпадение / изменение размера нового диапазона на основе выбора других листов

    Давайте будем гением компьютера.