-1

Я получил превосходный лист с 3 рабочими листами, которые я обновляю каждые 2-3 дня вручную, опуская столбец даты, и он автоматически обновляет столбцы на основе даты.

Например: допустим, я открыл Excel 4-го апреля, и я делаю, что я опускаю дату и до сегодняшнего дня -1 и последующие столбцы обновляются автоматически.

Я в основном добавляю еще 2 строки на лист, и столбцы обновляются в зависимости от даты.

01.04.2016    12       15      16     19

Я хотел бы сделать макрос, который добавляет в эти необходимые строки (если я не обновлял Excel в течение примерно 10 дней, он должен добавить в 9 строк и т.д.), Когда я нажимаю кнопку для 3 рабочих листов одновременно.

Большое спасибо.

1 ответ1

1

Существуют более эффективные решения, но они довольно просты и позволяют относительно легко увидеть, что именно делает ваш код:

Посмотрите на "OFFSET" и «END (XLDOWN)» OFFSET (+/- # строк,+/- # столбцов) Пример: selection.offset(-1,0) относится к ячейке непосредственно над выбранной ячейкой, в то время как selection.offset(1,1) относится к ячейке вниз и справа от выбранной ячейки.

Переместите курсор на последнюю дату в столбце:(Предполагается, что "A1" содержит первую дату в вашем списке; измените соответственно)

range("A1").end(xldown).select

Добавьте новые даты и заполните формулы, пока не будет достигнута желаемая дата:

do until selection = date-1
'select the next empty cell in the date column
selection.offset(1,0).select
'enter the date
selection.value = selection.offset(-1,0).value +1
'update each column
'repeat for each column as needed
'same row, one column to the right, getting formula from the cell above it:
selection.offset(0,1).formula=selection.offset(-1,1).formula
'same row, three columns to the right, getting formula from the cell above it:
selection.offset(0,3).formula=selection.offset(-1,3).formula
'after updating all desired columns, go to the next date:
loop

Вы можете просто повторить код для каждого листа (не рекомендуется):

sheets("name").select
'code
sheets("name2").select
'code
'etc.

или настройте цикл для рабочих таблиц:

for a = 1 to 3:
sheets(a).select
'code
next a

Если ваша рабочая книга содержит более трех листов, вам необходимо проверить имена листов:

for a = 1 to activeworkbook.sheets.count
select case sheets(a).name
case "name,name2,name3":
'code
case else:
'do nothing
end select
next a

Опять же, это не обязательно самые элегантные решения, но они должны дать вам твердое начало для создания вашего макроса.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .