Добрый день! Подскажите, пожалуйста, как отредактировать, чтобы при сохранении в имени файла не было скобок, а только новый порядковый номер через пробел? Например: не "Новая книга(1)" , а "Новая книга 1".
А вот то же самое, но с автонумерацией вместо проставления времени: 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
Добрый день! Подскажите, пожалуйста, как отредактировать, чтобы при сохранении в имени файла не было скобок, а только новый порядковый номер через пробел? Например: не "Новая книга(1)" , а "Новая книга 1".
А вот то же самое, но с автонумерацией вместо проставления времени: 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
Включусь в диалог, возможно ты сможешь мне помочь. Возможно ли сделать данный макрос с ведением лога сохранения? Т.е. при закрытии кники макрос срабатывает и сохраняет бэкап в общую папку с именем из 2х ячеек. И в другую книгу (с фиксированным путем) записывает: Путь, Дату сохранения, И данные из нескольких ячеек.
Какая часть кода нужна?
Заранее спасибо!
Alex_ST, привет!
Включусь в диалог, возможно ты сможешь мне помочь. Возможно ли сделать данный макрос с ведением лога сохранения? Т.е. при закрытии кники макрос срабатывает и сохраняет бэкап в общую папку с именем из 2х ячеек. И в другую книгу (с фиксированным путем) записывает: Путь, Дату сохранения, И данные из нескольких ячеек.
Сделать-то, конечно, можно, но при этом от основных "вкусных примочек" (типа сохранения пути в коллекции Names, автонумерации и т.п.), добавленных мною в макросе Save_Copy_As к абсолютно стандартному сохранению не останется ничего. Т.е. необходима практически полная переделка макроса, в результате которой получится стандартное сохранение, обвешанное нужными Вам примочками. А в топике получится оффтоп - макрос, мало относящийся к теме топика. Я сейчас от программирования в качестве хобби отошёл. Новые макросы не пишу. Только незначительно корректирую при необходимости свои старые. Задавайте вопрос в основном форуме. Там народ поможет.
Сделать-то, конечно, можно, но при этом от основных "вкусных примочек" (типа сохранения пути в коллекции Names, автонумерации и т.п.), добавленных мною в макросе Save_Copy_As к абсолютно стандартному сохранению не останется ничего. Т.е. необходима практически полная переделка макроса, в результате которой получится стандартное сохранение, обвешанное нужными Вам примочками. А в топике получится оффтоп - макрос, мало относящийся к теме топика. Я сейчас от программирования в качестве хобби отошёл. Новые макросы не пишу. Только незначительно корректирую при необходимости свои старые. Задавайте вопрос в основном форуме. Там народ поможет.Alex_ST
С уважением, Алексей MS Excel 2003 - the best!!!
Сообщение отредактировал Alex_ST - Суббота, 21.10.2017, 23:08
Alex_ST, Алекс, может подскажешь один ключевой момент не в рамках хобби
Как сделать что бы макрос срабатывал при сохранении файла пользователем? Я подумал нужно просто по тихому делать бекап в стороннюю папку (формат xlsx). Не спрашивая пользователя.
Мог бы с этим помочь? Спасибо
Alex_ST, Алекс, может подскажешь один ключевой момент не в рамках хобби
Как сделать что бы макрос срабатывал при сохранении файла пользователем? Я подумал нужно просто по тихому делать бекап в стороннюю папку (формат xlsx). Не спрашивая пользователя.
Добрый день! Отличный макрос, огромная благодарность за проделанную работу. А есть ли возможность добавить сохранение файла в PDF? Или возможность выбора варианта в конце экспорт в PDF или Excel?
Добрый день! Отличный макрос, огромная благодарность за проделанную работу. А есть ли возможность добавить сохранение файла в PDF? Или возможность выбора варианта в конце экспорт в PDF или Excel?Алекссандр
Сообщение отредактировал Алекссандр - Среда, 06.10.2021, 13:36
Алекссандр, Excel не имеет встроенного средства преобразования в PDF Для этого обычно просто направляют файл на печать на PDF-принтер. Это внешняя программа, которой макросом передать указания куда сохранять созданный файл и с каким именем вряд ли возможно. Я, по крайней мере, путей не вижу.
Алекссандр, Excel не имеет встроенного средства преобразования в PDF Для этого обычно просто направляют файл на печать на PDF-принтер. Это внешняя программа, которой макросом передать указания куда сохранять созданный файл и с каким именем вряд ли возможно. Я, по крайней мере, путей не вижу.Alex_ST
Alex_ST, Я пользуюсь Excel 2013 там есть экспорт в PDF, прописал макрос экспорта в PDF (через макрекодер, в VBA могу только копипастить ), но как его корректно включить в макрос Copy_As_No [vba]
Alex_ST, Я пользуюсь Excel 2013 там есть экспорт в PDF, прописал макрос экспорта в PDF (через макрекодер, в VBA могу только копипастить ), но как его корректно включить в макрос Copy_As_No [vba]
[offtop]У меня основной (на котором пишу макросы) - 2003. А там я что-то не видел экспорта в pdf (или просто не искал за ненадобностью) В более поздних Excel'ях писать макросы общего назначения (доступные для всех открытых книг) не вижу смысла, т.к. в Ribbon-интерфейсе хоть и можно сделать кнопки вызова макросов, но только в пользовательские группы на вкладках. При этом в пользовательских группах подгрупп сделать нельзя и свои картинки кнопкам не сделаешь. [/offtop]
[offtop]У меня основной (на котором пишу макросы) - 2003. А там я что-то не видел экспорта в pdf (или просто не искал за ненадобностью) В более поздних Excel'ях писать макросы общего назначения (доступные для всех открытых книг) не вижу смысла, т.к. в Ribbon-интерфейсе хоть и можно сделать кнопки вызова макросов, но только в пользовательские группы на вкладках. При этом в пользовательских группах подгрупп сделать нельзя и свои картинки кнопкам не сделаешь. [/offtop]Alex_ST