PDA

Показать полную графическую версию : [решено] Excel 2010 - Как вставить в книгу дату ее последнего изменения?


Страниц : [1] 2 3

Odisseus
04-06-2011, 20:48
Есть некая книга, которая периодически изменяется. Необходимо знать, когда она изменялась и автоматически вставлять эту дату где-нибудь на листе. Возможно ли это?

okshef
04-06-2011, 20:53
Меню "Вставка" - "Колонтитулы" (выбрать верхний или нижний) - "Текущая дата" - не подойдет?

Twister83
05-06-2011, 09:45
okshef, при открытии сразу заменяет на текущую, старую не увидеть.

Вычитал макрос по поводу даты, можно время добавить также:

В модуль ЭтаКнига

Option Explicit

Private Sub Workbook_Open()
activesheet.range("A1").Value = Format(Date, "dd.mm.yyyy")

End Sub

Iska
05-06-2011, 10:07
Twister83, угу. Только данные брать другие. Примерно так:
Private Sub Workbook_Open()
With ThisWorkbook.Worksheets.Item(1).Cells(1, 1)
.Value = ThisWorkbook.BuiltinDocumentProperties.Item("Last Save Time")
.NumberFormat = "dd/mm/yy h:mm;@"
End With
End Sub

«ThisWorkbook» — ссылка на ту рабочую книгу, которая содержит данный макрос.

Twister83
05-06-2011, 10:40
Iska, что-то ошибки выдает при компиляции, код вставлять без изменений?

Iska
05-06-2011, 11:12
Twister83, я пробовал на имеющемся у меня Office 2003, так что, теоретически, в Вашей версии вполне могут быть отличия в объектной модели. Перед первым использованием рабочая книга должна быть сохранена.

Odisseus
05-06-2011, 14:34
Всем спасибо за ответы! Есть все же несколько непоняток.
Iska, в вашем примере, как вывести дату в ячейку, ту же А1, как в примере Twister83 activesheet.range("A1") И как запустить потом этот макрос? Или он будет выполняться автоматически при сохранении книги?

Iska
05-06-2011, 20:26
Iska, в вашем примере, как вывести дату в ячейку, ту же А1, как в примере Twister83 activesheet.range("A1") »
Как раз и выводится дата последнего сохранения («.BuiltinDocumentProperties.Item("Last Save Time")») рабочей книги, в которой находится данный макрос («ThisWorkbook»), в ячейку «A1» («.Cells(1, 1)») первого рабочего листа («.Worksheets.Item(1)»). Затем та же ячейка форматируется для правильного отображения даты («.NumberFormat = "dd/mm/yy h:mm;@"»).

Поскольку код находится в модуле «ЭтаКнига» в процедуре «Workbook_Open()» — он будет (при не отключённых макросах) выполняться каждый раз при открытии рабочей книги.

Если нужно, чтобы код выполнялся и при сохранении — можно добавить аналогичный код в процедуру «Workbook_BeforeSave()». Но, естественно, тут уже надо будет предусмотреть тот факт, что перед первым сохранением свойство «Last Save Time» будет попросту недоступно.

Odisseus
06-06-2011, 21:51
Iska, очень информативно, спасибо огромное!

okshef
06-06-2011, 21:53
Затем та же ячейка форматируется для правильного отображения даты »
достаточно это сделать один раз, а потом исключить из кода.

Iska
07-06-2011, 04:24
достаточно это сделать один раз, а потом исключить из кода. »
Теоретически — да. На практике же надо смотреть, есть ли какая-либо защита у ячейки, рабочего листа, книги. Ибо строка/столбец могут быть банально удалены.

Odisseus
04-06-2014, 13:38
А как вставить дату в колонтитул?

Iska
04-06-2014, 20:06
Private Sub Workbook_Open()
Dim objWorksheet As Worksheet

With ThisWorkbook
For Each objWorksheet In .Worksheets
objWorksheet.PageSetup.CenterHeader = .BuiltinDocumentProperties.Item("Last Save Time")
Next
End With
End Sub

Odisseus
05-06-2014, 13:32
Iska,
Не работает... Если заменить CenterHeader на CenterFooter, то по идее, должно отобразиться в нижнем колонтитуле. Но ничего нет ни сверху ни снизу

Iska
05-06-2014, 15:54
Судя по PageSetup.CenterFooter Property (Excel) (http://msdn.microsoft.com/en-us/library/office/ff839224(v=office.14).aspx) — объектная модель не менялась.

Описывайте подробно что и как делали, как проверяли. что не работает. Буквально.

Odisseus
05-06-2014, 23:10
Буквально »
Ну, все просто - ПКМ на вкладке листа, view code, вставил код в редактор, сохранил, закрыл редактор, внес изменения в книгу, сохранил, закрыл книгу. Открываю книгу, а колонтитул пуст... Макросы включены.

okshef
06-06-2014, 00:15
Odisseus, попробуйте вставить код в процедуру Workbook_BeforeClose

Iska
06-06-2014, 04:54
ПКМ на вкладке листа, view code, вставил код в редактор »
В какой именно модуль вставляли? У меня есть подозрение, что Вы вставили код в модуль листа, а не книги.

P.S. Прошлый раз ведь проблем с этим не было?

Odisseus
06-06-2014, 14:40
В какой именно модуль вставляли? »
Собственно, скрин тут (http://i63.fastpic.ru/big/2014/0606/6d/9b34fa89e96c3a2ed3c6e5e657d4286d.jpg).
ПКМ на ThisWorkbook-View code, вставил туда, сохранил. Ничего не изменилось. Макросы проверил, включены все.

В прошлый раз мы ссылались на ячейки, а сейчас на колонтитул.

Iska
06-06-2014, 15:23
ПКМ на ThisWorkbook-View code, вставил туда, сохранил. »
А на скриншоте — не «ThisWorkbook», а «Sheet1» ;).




© OSzone.net 2001-2012