Я создаю здесь шаблон Excel (* .xlt) для пользователя, и одна из вещей, которые я хочу сделать, - это вставить текущую дату при создании нового документа (то есть, когда они дважды щелкают файл в проводник Виндоус). Как мне это сделать?
Обновлять: Мне следовало добавить, что я бы предпочел не использовать никаких vba (макросов). Если это единственный вариант, пусть так и будет, но я бы очень хотел, чтобы мой пользователь не заставлял не забывать нажимать какую-нибудь кнопку «разрешить содержимое макроса».


Вы можете отредактировать шаблон по умолчанию для Excel -
В каталоге Book.xlt есть файл XLSTART, обычно расположенный по адресу C:\Program Files\Microsoft Office\Office\XLStart\.
Вы должны иметь возможность добавить макрос под названием Workbook_Open
Private Sub Workbook_Open()
If ActiveWorkBook.Sheets(1).Range("A1") = "" Then
ActiveWorkBook.Sheets(1).Range("A1") = Now
End If
End Sub
Мой VBA немного ржавый, но вы можете обнаружить, что что-то вроде этого работает.
Вы можете использовать функцию рабочего листа = СЕГОДНЯ (), но, очевидно, это будет обновляться до текущей даты при каждом пересчете рабочей книги.
Единственный другой метод, о котором я могу думать, - это, как сказал 1729, кодирование события Workbook_Open:
Private Sub Workbook_Open()
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = Date
End Sub
Вы можете уменьшить проблему, требующую от пользователя принимать макросы каждый раз, путем цифровой подписи шаблона (в инструментах VBA IDE | Цифровая подпись ...) и выбора цифрового сертификата, однако вам потребуется получить сертификат из коммерческого сертификата. полномочия (см. http://msdn.microsoft.com/en-us/library/ms995347.aspx). Пользователь должен будет выбрать всегда доверять этому сертификату при первом запуске шаблона, но после этого им больше не будет предлагаться.
Чтобы избежать использования VBA и если вы думаете, что ваши пользователи могут следовать инструкциям, вы можете попросить их скопировать дату, а затем вставить специальные значения->, чтобы установить дату, чтобы она не изменилась в будущем.