Данный макрос, помещённый в Personal.xls, при его вызове сохраняет копию активной книги в заданной в диалоге выбора папке. Путь к папке для сохранения копий хранится в коллекции Names самой сохраняемой книги. Поэтому путь сохранения копии приходится задавать только один раз - при первом сохранении копии. В последующем диалог сохранения копии будет открываться уже на нужной папке. Сохраняемые копии имеют то же имя, что и файл-оригинал, но с приписанным перед расширением суффиксом - датой и временем сохранения копии. [vba]
Code
Sub Save_Copy_As() '--------------------------------------------------------------------------------------- ' Procedure : Save_Copy_As ' Author : Alex_ST ' DateTime : 07.02.2012, 17:05 ' URL : http://www.excelworld.ru/forum/3-1293-14737-16-1328619875 ' Purpose : Сохранение копии активного файла ' Notes : Путь сохранения копий хранится в коллекции .Names книги (в именованном диапазоне) '--------------------------------------------------------------------------------------- Const sPath_in_Names = "Path4SaveCopyAs" ' имя элемента коллекции .Names, в котором должен храниться путь для сохранения копий файла Dim sSuff$: sSuff = " [" & Format(Now, "yyyy/mm/dd hh-mm'ss''") & "]" ' суффикс к имени файла копии - дата и время сохренения копии файла Dim FileName, sExp$, sDirPath$, sFullFilePath$, sNewPath$ Dim bReadOnlyRecommended As Boolean With ActiveWorkbook FileName = .Name ' например, "Книга1.xls" sExp = Right(FileName, Len(FileName) - InStrRev(FileName, ".") + 1) ' расширение файла вместе с точкой (например, ".xls") FileName = Left(FileName, Len(FileName) - Len(sExp)) & sSuff & sExp ' например, "Книга1 [2012.02.06 15-24'39''].xls" On Error Resume Next sDirPath = .Names(sPath_in_Names).Value ' считать из коллекции .Names значение, ранее сохраненное под именем sPath_in_Names If Err Then .Names.Add sPath_in_Names, .Path & "\": sDirPath = .Names(sPath_in_Names).Value ' если считать не удалось, значит путь ранее не задавался и он для первого раза задаётся равным ActiveWorkbook.Path sDirPath = Mid(sDirPath, 3, Len(sDirPath) - 3) ' убрать из считанного значения в начале "= и в конце " sDirPath = sDirPath & IIf(Right(sDirPath, 1) = "\", "", "\") ' на всякий случай (если имя было задано в ручную и при этом не верно - без слэша) .Names(sPath_in_Names).Value = sDirPath ' запомнить путь сохранения копий в коллекции .Names под именем sPath_in_Names sFullFilePath = sDirPath & FileName ' полный путь сохранения вместе с полным именем копии REPEAT_: FileName = Application.GetSaveAsFilename(InitialFileName:=sFullFilePath, _ FileFilter:="Excel Files (*" & sExp & "), *" & sExp & ", All Files (*.*),*.*", _ Title:="Сохранение копии файла") 'задать путь сохранения и имя копии файла в окне выбора If VarType(FileName) = vbBoolean Then Exit Sub ' если нажали "Отмена", то FileName = False, если "Сохранить" - полный путь к файлу вместе с его именем If FileName = .FullName Then MsgBox "Здесь нельзя сохранить файл под таким именем!", 16, "Ошибка": GoTo REPEAT_ sDirPath = Left(FileName, InStrRev(FileName, "\")) ' путь к папке сохранения копий без имени файла .Names(sPath_in_Names).Value = sDirPath ' запомнить выбранный в диалоге путь в коллекции .Names под именем sPath_in_Names bReadOnlyRecommended = .ReadOnlyRecommended ' запомнить параметры исходного файла .ReadOnlyRecommended = --(MsgBox("Рекомендовать открывать файл только для чтения?", 36) - 7) ' MsgBox Argument 4==vbYesNo 32==vbQuestion, MsgBox Return Values: vbYes=6, vbNo=7 .SaveCopyAs FileName .ReadOnlyRecommended = bReadOnlyRecommended ' восстановить параметры исходного файла End With End Sub
[/vba]
Данный макрос, помещённый в Personal.xls, при его вызове сохраняет копию активной книги в заданной в диалоге выбора папке. Путь к папке для сохранения копий хранится в коллекции Names самой сохраняемой книги. Поэтому путь сохранения копии приходится задавать только один раз - при первом сохранении копии. В последующем диалог сохранения копии будет открываться уже на нужной папке. Сохраняемые копии имеют то же имя, что и файл-оригинал, но с приписанным перед расширением суффиксом - датой и временем сохранения копии. [vba]
Code
Sub Save_Copy_As() '--------------------------------------------------------------------------------------- ' Procedure : Save_Copy_As ' Author : Alex_ST ' DateTime : 07.02.2012, 17:05 ' URL : http://www.excelworld.ru/forum/3-1293-14737-16-1328619875 ' Purpose : Сохранение копии активного файла ' Notes : Путь сохранения копий хранится в коллекции .Names книги (в именованном диапазоне) '--------------------------------------------------------------------------------------- Const sPath_in_Names = "Path4SaveCopyAs" ' имя элемента коллекции .Names, в котором должен храниться путь для сохранения копий файла Dim sSuff$: sSuff = " [" & Format(Now, "yyyy/mm/dd hh-mm'ss''") & "]" ' суффикс к имени файла копии - дата и время сохренения копии файла Dim FileName, sExp$, sDirPath$, sFullFilePath$, sNewPath$ Dim bReadOnlyRecommended As Boolean With ActiveWorkbook FileName = .Name ' например, "Книга1.xls" sExp = Right(FileName, Len(FileName) - InStrRev(FileName, ".") + 1) ' расширение файла вместе с точкой (например, ".xls") FileName = Left(FileName, Len(FileName) - Len(sExp)) & sSuff & sExp ' например, "Книга1 [2012.02.06 15-24'39''].xls" On Error Resume Next sDirPath = .Names(sPath_in_Names).Value ' считать из коллекции .Names значение, ранее сохраненное под именем sPath_in_Names If Err Then .Names.Add sPath_in_Names, .Path & "\": sDirPath = .Names(sPath_in_Names).Value ' если считать не удалось, значит путь ранее не задавался и он для первого раза задаётся равным ActiveWorkbook.Path sDirPath = Mid(sDirPath, 3, Len(sDirPath) - 3) ' убрать из считанного значения в начале "= и в конце " sDirPath = sDirPath & IIf(Right(sDirPath, 1) = "\", "", "\") ' на всякий случай (если имя было задано в ручную и при этом не верно - без слэша) .Names(sPath_in_Names).Value = sDirPath ' запомнить путь сохранения копий в коллекции .Names под именем sPath_in_Names sFullFilePath = sDirPath & FileName ' полный путь сохранения вместе с полным именем копии REPEAT_: FileName = Application.GetSaveAsFilename(InitialFileName:=sFullFilePath, _ FileFilter:="Excel Files (*" & sExp & "), *" & sExp & ", All Files (*.*),*.*", _ Title:="Сохранение копии файла") 'задать путь сохранения и имя копии файла в окне выбора If VarType(FileName) = vbBoolean Then Exit Sub ' если нажали "Отмена", то FileName = False, если "Сохранить" - полный путь к файлу вместе с его именем If FileName = .FullName Then MsgBox "Здесь нельзя сохранить файл под таким именем!", 16, "Ошибка": GoTo REPEAT_ sDirPath = Left(FileName, InStrRev(FileName, "\")) ' путь к папке сохранения копий без имени файла .Names(sPath_in_Names).Value = sDirPath ' запомнить выбранный в диалоге путь в коллекции .Names под именем sPath_in_Names bReadOnlyRecommended = .ReadOnlyRecommended ' запомнить параметры исходного файла .ReadOnlyRecommended = --(MsgBox("Рекомендовать открывать файл только для чтения?", 36) - 7) ' MsgBox Argument 4==vbYesNo 32==vbQuestion, MsgBox Return Values: vbYes=6, vbNo=7 .SaveCopyAs FileName .ReadOnlyRecommended = bReadOnlyRecommended ' восстановить параметры исходного файла End With End Sub
А вот то же самое, но с автонумерацией вместо проставления времени:[vba]
Code
Sub Save_Copy_As_I() '--------------------------------------------------------------------------------------- ' Procedure : Save_Copy_As_I ' Author : Alex_ST ' Topic_HEADER : Сохранить копию текущего файла, запомнив папку для сохранения ' Topic_URL : http://www.excelworld.ru/forum/3-1293-18266-16-1335949341 ' DateTime : 02.05.12, 13:02 ' Purpose : Сохранение копии активного файла с автоматическим увеличением суффикса (номера копии) ' Notes : Путь сохранения копий хранится в коллекции .Names книги (в именованном диапазоне) '--------------------------------------------------------------------------------------- Const sPath_in_Names = "Path4SaveCopyAs" ' имя элемента коллекции .Names, в котором должен храниться путь для сохранения копий файла Dim sDirPath$, sExp$, sMainName$, FileName, i% With ActiveWorkbook On Error Resume Next sDirPath = .Names(sPath_in_Names).Value ' считать из коллекции .Names значение, ранее сохраненное под именем sPath_in_Names If Err Then .Names.Add sPath_in_Names, .Path & "\": sDirPath = .Path & "\" ' если считать не удалось, значит путь ранее не задавался и он для первого раза задаётся равным ActiveWorkbook.Path sDirPath = Mid(sDirPath, 3, Len(sDirPath) - 3) ' убрать из считанного значения в начале "= и в конце " sDirPath = sDirPath & IIf(Right(sDirPath, 1) = "\", "", "\") ' на всякий случай (если имя было задано в ручную и при этом не верно - без слэша) .Names(sPath_in_Names).Value = sDirPath ' запомнить путь сохранения копий в коллекции .Names под именем sPath_in_Names
sExp = Right(.Name, Len(.Name) - InStrRev(.Name, ".") + 1) ' расширение файла вместе с точкой (например, ".xls") sMainName = Left(.Name, Len(.Name) - Len(sExp)) Do FileName = sDirPath & sMainName & "(" & i & ")" & sExp: i = i + 1 Loop While Dir(FileName) <> "" ' пока имя не будет уникальным в папке FileName = Application.GetSaveAsFilename(InitialFileName:=FileName, _ FileFilter:="Excel Files (*" & sExp & "), *" & sExp & ", All Files (*.*),*.*", _ Title:="Сохранение копии файла") 'задать путь сохранения и имя копии файла в окне выбора If VarType(FileName) = vbBoolean Then Exit Sub ' если нажали "Отмена", то FileName = False, если "Сохранить" - полный путь к файлу вместе с его именем sDirPath = Left(FileName, InStrRev(FileName, "\")) ' путь к папке сохранения копий без имени файла .Names(sPath_in_Names).Value = sDirPath ' запомнить выбранный в диалоге путь в коллекции .Names под именем sPath_in_Names .SaveCopyAs FileName End With End Sub
[/vba]
А вот то же самое, но с автонумерацией вместо проставления времени:[vba]
Code
Sub Save_Copy_As_I() '--------------------------------------------------------------------------------------- ' Procedure : Save_Copy_As_I ' Author : Alex_ST ' Topic_HEADER : Сохранить копию текущего файла, запомнив папку для сохранения ' Topic_URL : http://www.excelworld.ru/forum/3-1293-18266-16-1335949341 ' DateTime : 02.05.12, 13:02 ' Purpose : Сохранение копии активного файла с автоматическим увеличением суффикса (номера копии) ' Notes : Путь сохранения копий хранится в коллекции .Names книги (в именованном диапазоне) '--------------------------------------------------------------------------------------- Const sPath_in_Names = "Path4SaveCopyAs" ' имя элемента коллекции .Names, в котором должен храниться путь для сохранения копий файла Dim sDirPath$, sExp$, sMainName$, FileName, i% With ActiveWorkbook On Error Resume Next sDirPath = .Names(sPath_in_Names).Value ' считать из коллекции .Names значение, ранее сохраненное под именем sPath_in_Names If Err Then .Names.Add sPath_in_Names, .Path & "\": sDirPath = .Path & "\" ' если считать не удалось, значит путь ранее не задавался и он для первого раза задаётся равным ActiveWorkbook.Path sDirPath = Mid(sDirPath, 3, Len(sDirPath) - 3) ' убрать из считанного значения в начале "= и в конце " sDirPath = sDirPath & IIf(Right(sDirPath, 1) = "\", "", "\") ' на всякий случай (если имя было задано в ручную и при этом не верно - без слэша) .Names(sPath_in_Names).Value = sDirPath ' запомнить путь сохранения копий в коллекции .Names под именем sPath_in_Names
sExp = Right(.Name, Len(.Name) - InStrRev(.Name, ".") + 1) ' расширение файла вместе с точкой (например, ".xls") sMainName = Left(.Name, Len(.Name) - Len(sExp)) Do FileName = sDirPath & sMainName & "(" & i & ")" & sExp: i = i + 1 Loop While Dir(FileName) <> "" ' пока имя не будет уникальным в папке FileName = Application.GetSaveAsFilename(InitialFileName:=FileName, _ FileFilter:="Excel Files (*" & sExp & "), *" & sExp & ", All Files (*.*),*.*", _ Title:="Сохранение копии файла") 'задать путь сохранения и имя копии файла в окне выбора If VarType(FileName) = vbBoolean Then Exit Sub ' если нажали "Отмена", то FileName = False, если "Сохранить" - полный путь к файлу вместе с его именем sDirPath = Left(FileName, InStrRev(FileName, "\")) ' путь к папке сохранения копий без имени файла .Names(sPath_in_Names).Value = sDirPath ' запомнить выбранный в диалоге путь в коллекции .Names под именем sPath_in_Names .SaveCopyAs FileName End With End Sub
Рад приветствовать, О, Великий и Фсимагучий! Умоляю, подскажи, что добавить в сие чудо, чтобы макрос включался не с кнопки а автозапуском при открытии книги и творил то же самое, через заданный промежуток времени?! Можно ли убрать из макроса запрос на подтверждение сохранения, а просто прописать адрес в теле кода? Буду предельно признателен за любую помощь.
Рад приветствовать, О, Великий и Фсимагучий! Умоляю, подскажи, что добавить в сие чудо, чтобы макрос включался не с кнопки а автозапуском при открытии книги и творил то же самое, через заданный промежуток времени?! Можно ли убрать из макроса запрос на подтверждение сохранения, а просто прописать адрес в теле кода? Буду предельно признателен за любую помощь.Gloom
Сегодня уже не успею: конец пятницы, надо завершить пару-тройку мелких дел. А дома в выходные нет возможности надолго засесть за комп. Попробую сделать что-нибудь на следующей неделе.
Сегодня уже не успею: конец пятницы, надо завершить пару-тройку мелких дел. А дома в выходные нет возможности надолго засесть за комп. Попробую сделать что-нибудь на следующей неделе.Alex_ST
В черновом варианте сделал. Пока не как надстройка - так проще отлаживать. Потом переделать в надстройку не трудно. Потестируйте. Что-то я там, кажется, перемудрил с защитами от ошибок... А может и нет. Надо поюзать, посмотреть "в разных позах". Макрос: 1. Проверяет в ходе работы доступность папки бэкапов на запись. Если папка вдруг станет недоступна, то останавливается с предупреждением. 2. Производит записи копий не только по таймеру, но и при сохранениях книг. 3. В автоматическом режиме не бэкапит те книги, которые не изменялись, а также надстройки.
В черновом варианте сделал. Пока не как надстройка - так проще отлаживать. Потом переделать в надстройку не трудно. Потестируйте. Что-то я там, кажется, перемудрил с защитами от ошибок... А может и нет. Надо поюзать, посмотреть "в разных позах". Макрос: 1. Проверяет в ходе работы доступность папки бэкапов на запись. Если папка вдруг станет недоступна, то останавливается с предупреждением. 2. Производит записи копий не только по таймеру, но и при сохранениях книг. 3. В автоматическом режиме не бэкапит те книги, которые не изменялись, а также надстройки.Alex_ST
Прошу прощения за длительное молчание. Помучал файлик, вроде все работает. По каким то причинам не всегда работает хоткей на вызов бокса, (запускаю из вба Show_), при нажатии кнопки ON-OFF надпись не меняется, состояние видно только по положению кнопки (утоплена/отжата) и по периодическим подвисонам при сохранении (файлы гигантские у меня). Пытался перенести все добро в личную книгу макросов, видимо сделал как то не так, материться на каждом шагу, в макросах я пока криворук
Прошу прощения за длительное молчание. Помучал файлик, вроде все работает. По каким то причинам не всегда работает хоткей на вызов бокса, (запускаю из вба Show_), при нажатии кнопки ON-OFF надпись не меняется, состояние видно только по положению кнопки (утоплена/отжата) и по периодическим подвисонам при сохранении (файлы гигантские у меня). Пытался перенести все добро в личную книгу макросов, видимо сделал как то не так, материться на каждом шагу, в макросах я пока криворук Gloom
Gloom, Вы слишком долго молчали. Я как раз сейчас собрался выключать компьютер на долго - ухожу в отпуск на 2 недели. Ещё бы 20 минут и я бы уже вообще не ответил.
Только что проверил: у меня с кнопкой всё в порядке и в 2003, и в 2010-ом Excel'e Переносить очень просто: 1. Мышкой тащите к себе в Personal.xls модули frmAutoSaveCopy и modAutoSaveCopy 2. Из модуля книги ThisWorkbook копируете всё содержимое и вставляете в свой модуль книги (скорее всего он называется ЭтаКнига) 3. Программное имя листа "Лист1" в своём Personal.xls меняете на имя "ShtSetup" Программное имя - это не имя листа. Оно изменяется только в VBE :
Всё. Выключаюсь. Убегаю чемодан паковать. Через 3 часа поезд.
Gloom, Вы слишком долго молчали. Я как раз сейчас собрался выключать компьютер на долго - ухожу в отпуск на 2 недели. Ещё бы 20 минут и я бы уже вообще не ответил.
Только что проверил: у меня с кнопкой всё в порядке и в 2003, и в 2010-ом Excel'e Переносить очень просто: 1. Мышкой тащите к себе в Personal.xls модули frmAutoSaveCopy и modAutoSaveCopy 2. Из модуля книги ThisWorkbook копируете всё содержимое и вставляете в свой модуль книги (скорее всего он называется ЭтаКнига) 3. Программное имя листа "Лист1" в своём Personal.xls меняете на имя "ShtSetup" Программное имя - это не имя листа. Оно изменяется только в VBE :
Всё. Выключаюсь. Убегаю чемодан паковать. Через 3 часа поезд.Alex_ST
Выдалась пара минут до отъезда. Вот, сделал надстройку. Положите её в папку C:\Users\Имя_Пользователя\AppData\Roaming\Microsoft\AddIns и подключите после запуска Excel'я (2003: Сервис-Надстройки-...) или просто положите в XLSTART рядом с Personal.xls (тогда она автоматом подключится при запуске)
Выдалась пара минут до отъезда. Вот, сделал надстройку. Положите её в папку C:\Users\Имя_Пользователя\AppData\Roaming\Microsoft\AddIns и подключите после запуска Excel'я (2003: Сервис-Надстройки-...) или просто положите в XLSTART рядом с Personal.xls (тогда она автоматом подключится при запуске)Alex_ST
Работает безупречно! Многим покажется мелочью, но всем кто безвозвратно утрачивал результат своей работы за полдня настоятельно рекомендую! Невидимый и ненадоедливый ангел-хранитель Ваших потуг и усилий.
З.Ы. Пару минут искал в панелях кнопки или менюшки от настройки , ВЫЗОВ МЕНЮ (Alt+Ctrl+Del)
Работает безупречно! Многим покажется мелочью, но всем кто безвозвратно утрачивал результат своей работы за полдня настоятельно рекомендую! Невидимый и ненадоедливый ангел-хранитель Ваших потуг и усилий.
З.Ы. Пару минут искал в панелях кнопки или менюшки от настройки , ВЫЗОВ МЕНЮ (Alt+Ctrl+Del)Gloom
Пару минут искал в панелях кнопки или менюшки от настройки
Если бы я сделал кнопочку, то её мог бы нажать любой "лапоть", портящий Вам файлы, и выйти в режим настройки с соответствующими последствиями. Поэтому и оставил вызов по горячим клавишам Ctrl+Shift+S А при чём здесь "фигура из трёх пальцев"
Quote (Gloom)
(Alt+Ctrl+Del)
я, честно говоря, не понял
Рад, что помог.
Quote (Gloom)
Пару минут искал в панелях кнопки или менюшки от настройки
Если бы я сделал кнопочку, то её мог бы нажать любой "лапоть", портящий Вам файлы, и выйти в режим настройки с соответствующими последствиями. Поэтому и оставил вызов по горячим клавишам Ctrl+Shift+S А при чём здесь "фигура из трёх пальцев"
Пофиксил баги (в предыдущей версии кроме книг сохранялись ещё и надстройки) и чуть навёл красоты. По обновленной версии создал топик Надстройка AutoSaveCopy
Пофиксил баги (в предыдущей версии кроме книг сохранялись ещё и надстройки) и чуть навёл красоты. По обновленной версии создал топик Надстройка AutoSaveCopyAlex_ST
Сразу прошу прощения, если вопрос дурацкий. Но уже полдня гуглю, и чего то никак.
Есть файл, который необходимо сохранять с именем содержащим текущую дату+1.
Сейчас это выглядит так: [vba]
Код
Dim r As Date r = Format(Now(), "dd mmmm yyyy") ActiveWorkbook.SaveAs Filename:= _ "F:\Работа\\Заказ_" & r & ".xls", FileFormat:=xlExcel8 _ , Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, _ CreateBackup:=False
[/vba]
Но мне надо чтобы формат даты был не dd mmmm yyyy, наоборот сначала год, потом месяц, потом собственно число. Такое возможно? И ещё как сделать чтобы дата была +1, т.е. если сегодня 6 сентября 2012г, надо чтобы файл был "Заказ_20120907"
Буду премного благодарен за помощь. Ну или за посыл в верном направлении.
Alex_ST,
Сразу прошу прощения, если вопрос дурацкий. Но уже полдня гуглю, и чего то никак.
Есть файл, который необходимо сохранять с именем содержащим текущую дату+1.
Сейчас это выглядит так: [vba]
Код
Dim r As Date r = Format(Now(), "dd mmmm yyyy") ActiveWorkbook.SaveAs Filename:= _ "F:\Работа\\Заказ_" & r & ".xls", FileFormat:=xlExcel8 _ , Password:="", WriteResPassword:="", ReadOnlyRecommended:=True, _ CreateBackup:=False
[/vba]
Но мне надо чтобы формат даты был не dd mmmm yyyy, наоборот сначала год, потом месяц, потом собственно число. Такое возможно? И ещё как сделать чтобы дата была +1, т.е. если сегодня 6 сентября 2012г, надо чтобы файл был "Заказ_20120907"
Буду премного благодарен за помощь. Ну или за посыл в верном направлении. Гость
И вовсе незачем было долго гуглить. Достаточно было просто нажать F1, поставив курсор в своём коде на слово Now , чтобы моментально узнать, что эта функция возвращает дату и время, а посмотрев по See Also на функцию Date, узнать, что она возвращает дату. А точно также, встав курсором на слово Format, можно было узнать про аргументы этой функции (да в конце-концов просто логическим путём можно было догадаться, что если хочешь формат ГОД-МЕСЯЦ-ДЕНЬ, то и в аргументах функции параметры должны быть указаны в таком же порядке) Т.е. Вам нужно было всего лишь написать:[vba]
Code
Format(Date + 1, "yyyy mm dd")
[/vba]
И вовсе незачем было долго гуглить. Достаточно было просто нажать F1, поставив курсор в своём коде на слово Now , чтобы моментально узнать, что эта функция возвращает дату и время, а посмотрев по See Also на функцию Date, узнать, что она возвращает дату. А точно также, встав курсором на слово Format, можно было узнать про аргументы этой функции (да в конце-концов просто логическим путём можно было догадаться, что если хочешь формат ГОД-МЕСЯЦ-ДЕНЬ, то и в аргументах функции параметры должны быть указаны в таком же порядке) Т.е. Вам нужно было всего лишь написать:[vba]
поставив курсор в своём коде на слово Now , чтобы моментально узнать, что эта функция возвращает дату и время, а посмотрев по See Also на функцию Date, узнать, что она возвращает дату.
Я в макрос не то, чтобы чайник... Есть те кто хуже чайников? :)
Quote (Alex_ST)
логическим путём можно было догадаться, что если хочешь формат ГОД-МЕСЯЦ-ДЕНЬ, то и в аргументах функции параметры должны быть указаны в таком же порядке
Ага, я сначала тоже так подумал, но оказалось, что всё равно сохраняет в формате дд/мммм/уууу.
Quote (Alex_ST)
Format(Date + 1, "yyyy mm dd")
Спасибо большое!
Quote (Alex_ST)
Достаточно было просто нажать F1
Мда, а слона то я и не заметил.
Quote (Alex_ST)
поставив курсор в своём коде на слово Now , чтобы моментально узнать, что эта функция возвращает дату и время, а посмотрев по See Also на функцию Date, узнать, что она возвращает дату.
Я в макрос не то, чтобы чайник... Есть те кто хуже чайников? :)
Quote (Alex_ST)
логическим путём можно было догадаться, что если хочешь формат ГОД-МЕСЯЦ-ДЕНЬ, то и в аргументах функции параметры должны быть указаны в таком же порядке
Ага, я сначала тоже так подумал, но оказалось, что всё равно сохраняет в формате дд/мммм/уууу.
Тут в другом топике попросили подпилить процедуры так, чтобы имя копии бралось из ячейки листа. Спрошено-сделано. А за одно и причесал два предыдущих макроса. См. приаттаченный файл. В новом макросе Save_Copy_As_Name_And_Index имя сохраняемого файла составляется из двух частей: корня и суффикса. Корень задаётся в ячейке, на которую указывает имя ROOT. Суффикс - это 4-значный накопительный индекс. В остальном принцип тот же, что и в предыдущих процедурах: путь для сохранения копий хранится в именах под указателем Path4SaveCopyAs Если в файле такое имя не найдено в книге, то оно создаётся автоматически и содержит для начала путь к активной книге. Сохранение копии предлагается по последнему указанному пользователем пути. Если имя ROOT не задано в книге, то оно создаётся "отвязанным от ячейки" и равным "Модель не задана" После чего не составляет труда "привязать" это имя к нужной ячейке, используя диспетчер имён. Для того, чтобы при сохранении файла под именем, задаваемым в ячейке в ручную, не возникало проблем, добавлена функция исправления (замены) не допустимых в именах файлов символов
Код
/\:*?<>|"
на символ _ В общем, комментариев там много. Разберётесь, кому нужно сами. А если всё-таки будут вопросы, спрашивайте.
Тут в другом топике попросили подпилить процедуры так, чтобы имя копии бралось из ячейки листа. Спрошено-сделано. А за одно и причесал два предыдущих макроса. См. приаттаченный файл. В новом макросе Save_Copy_As_Name_And_Index имя сохраняемого файла составляется из двух частей: корня и суффикса. Корень задаётся в ячейке, на которую указывает имя ROOT. Суффикс - это 4-значный накопительный индекс. В остальном принцип тот же, что и в предыдущих процедурах: путь для сохранения копий хранится в именах под указателем Path4SaveCopyAs Если в файле такое имя не найдено в книге, то оно создаётся автоматически и содержит для начала путь к активной книге. Сохранение копии предлагается по последнему указанному пользователем пути. Если имя ROOT не задано в книге, то оно создаётся "отвязанным от ячейки" и равным "Модель не задана" После чего не составляет труда "привязать" это имя к нужной ячейке, используя диспетчер имён. Для того, чтобы при сохранении файла под именем, задаваемым в ячейке в ручную, не возникало проблем, добавлена функция исправления (замены) не допустимых в именах файлов символов
Код
/\:*?<>|"
на символ _ В общем, комментариев там много. Разберётесь, кому нужно сами. А если всё-таки будут вопросы, спрашивайте.Alex_ST