Приветствую вас профи Excel!!! Помогите пожалуйста с решением задачи. Облазил весь интернет и данный сайт, но не нашел похожего обсуждения. В определенном файле необходимо, чтобы при создании нового листа, его имя было не Лист1, Лист2 и т.д., а имя равное текущей дате и времени. И этот лист был копией одного уже созданного листа. Пробовал через макрос, со ссылкой на формулу ТДАТА, но не получилось, т.к. создается лист с именем уже созданного, что генерирует ошибку об одноименности листов. Заранее всех благодарю за ответы или хотя бы попытки [moder] можно макрос посмотреть? часть, где происходит описанное[/moder]
Приветствую вас профи Excel!!! Помогите пожалуйста с решением задачи. Облазил весь интернет и данный сайт, но не нашел похожего обсуждения. В определенном файле необходимо, чтобы при создании нового листа, его имя было не Лист1, Лист2 и т.д., а имя равное текущей дате и времени. И этот лист был копией одного уже созданного листа. Пробовал через макрос, со ссылкой на формулу ТДАТА, но не получилось, т.к. создается лист с именем уже созданного, что генерирует ошибку об одноименности листов. Заранее всех благодарю за ответы или хотя бы попытки [moder] можно макрос посмотреть? часть, где происходит описанное[/moder]ddmax
Думаю нет. Или я чего- то недопонимаю. Нужна кнопка, при нажатии которой, будет копироваться определенный лист и ему будет присваиваться имя = дата и время
Думаю нет. Или я чего- то недопонимаю. Нужна кнопка, при нажатии которой, будет копироваться определенный лист и ему будет присваиваться имя = дата и времяddmax
Только всё-таки, наверное, лучше имя с секундами давать. А то за минуту можно на кнопочку и несколько раз нажать и вылететь по ошибке из-за не уникального имени листа.[vba]
Код
Sub Новый_Лист() Sheets("Заказ МБП").Copy after:=Sheets(Sheets.Count) ActiveSheet.Name = Format(Now, "yy-mm-dd hh.mm.ss") End Sub
[/vba]
Только всё-таки, наверное, лучше имя с секундами давать. А то за минуту можно на кнопочку и несколько раз нажать и вылететь по ошибке из-за не уникального имени листа.[vba]
Код
Sub Новый_Лист() Sheets("Заказ МБП").Copy after:=Sheets(Sheets.Count) ActiveSheet.Name = Format(Now, "yy-mm-dd hh.mm.ss") End Sub
ddmax, Вы макрорекордером пользоваться умеете? Если нет, Вкладка Вид - Макросы - Запись макроса - ОК. Далее делаем те действия, которые Вы хотите записать. Останавливаем запись макроса: Вид - Макросы - Остановить запись. Идем в Стандартный модуль, смотрим, что получилось, убираем не нужное (например, связку Select, Selection. В подавляющем большинстве случаев не надо активировать/выделять ячейку, чтобы что-то с ней сделать).
ddmax, Вы макрорекордером пользоваться умеете? Если нет, Вкладка Вид - Макросы - Запись макроса - ОК. Далее делаем те действия, которые Вы хотите записать. Останавливаем запись макроса: Вид - Макросы - Остановить запись. Идем в Стандартный модуль, смотрим, что получилось, убираем не нужное (например, связку Select, Selection. В подавляющем большинстве случаев не надо активировать/выделять ячейку, чтобы что-то с ней сделать).ShAM
К стати. Я тут, подумав на досуге немного, решил, что секунды в имя листа вписывать может быть не удобно. Слишком длинные цифровые имена могут оказаться плохо читабельны. Подумал. Сделал.[vba]
Код
Sub NewSheet() Dim i%, sName$, sSuff$, sTest$ sName = Format(Now, "yy-mm-dd hh.mm") On Error Resume Next Do sSuff = IIf(i, " (" & i & ")", "") Err.Clear: sTest = Sheets(sName & sSuff).[A1].Value i = i + 1 Loop While Not CBool(Err) Application.EnableEvents = False Sheets("Заказ МБП").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = sName & sSuff Application.EnableEvents = True End Sub
[/vba]Теперь новый создаваемый лист имя будет получать имя в виде даты и времени без секунд. А если в ту же минуту ещё раз выполнить макрос, то к имени будет приписан индекс в скобках (как при обычном копировании листа)
К стати. Я тут, подумав на досуге немного, решил, что секунды в имя листа вписывать может быть не удобно. Слишком длинные цифровые имена могут оказаться плохо читабельны. Подумал. Сделал.[vba]
Код
Sub NewSheet() Dim i%, sName$, sSuff$, sTest$ sName = Format(Now, "yy-mm-dd hh.mm") On Error Resume Next Do sSuff = IIf(i, " (" & i & ")", "") Err.Clear: sTest = Sheets(sName & sSuff).[A1].Value i = i + 1 Loop While Not CBool(Err) Application.EnableEvents = False Sheets("Заказ МБП").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = sName & sSuff Application.EnableEvents = True End Sub
[/vba]Теперь новый создаваемый лист имя будет получать имя в виде даты и времени без секунд. А если в ту же минуту ещё раз выполнить макрос, то к имени будет приписан индекс в скобках (как при обычном копировании листа)Alex_ST