
Я пытаюсь создать шаблон Excel, который будет содержать три поля, которые я хочу обновлять автоматически при открытии.
Поля, которые будет иметь этот шаблон
- Текущая дата: 02/07/2012
- Номер листа: 25
- Между датами: 02/07/2012 по 02/08/2012
Когда я открою этот шаблон после 03.08.2012, на этом листе будут новые данные.
- Текущая дата: 03/08/2012
- Номер листа: 26
- Между датами: 03/08/2012 по 02/09/2012
На текущую дату
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = Date
End Sub
Можно ли это сделать с помощью функции Excel или мне нужно использовать VB, а также как мне автоматически обновить шаблон новыми значениями, чтобы в следующий раз использовать эти даты.
решение1
Добиться этого можно несколькими способами.
Самый простой вариант предполагает, что даты начала и окончания совпадают.
- Даты "between" должны быть в двух ячейках. Дата "start" устанавливается на 2-е число текущего месяца
=DATE(YEAR( NOW() ), MONTH( NOW() ), 2)
, дата "end" на 2-е число текущего месяца +1=DATE(YEAR( NOW() ), MONTH( NOW() ) +1, 2)
- Затем «текущая» дата просто устанавливается на «начальную» дату.
Однако вам нужно "исправить" эти даты при сохранении таблицы. Предположим, что "текущая" дата находится в ячейке B3, а 2 промежуточные даты находятся в ячейках . Вы можете использовать что-то вроде:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Range("B3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
Range("B5:C5").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues
End Sub
В ThisWorkbook
модуле кода. Это просто копирует/вставляет значения в ячейки, чтобы формула заменялась датами.
Упс, требуется одно дополнение к этому. Код, который я дал, немного упрощен, так как вы не сможете сохранить шаблон, поэтому вам нужно обернуть данный код во что-то, что не даст ему сработать при редактировании самого шаблона. Возможно, самый простой способ — использовать соглашение об именовании файлов. Возможно, шаблон имеет текст "TEMPLATE " в начале имени файла.