Скажу сразу, что авто сохранение мне не подходит по нескольким причинам. Есть форма по созданию резервных копий книги. Все что можно доработал под себя, а оставшиеся вопросы решить пока не могу. Вопросы следующие:
1 Из модуля все убрать (при необходимости) в форму, чтобы она работала без модуля Module_SaveBook 2 Заменить "Использовать BAK расширение" на "Использовать формат Name yy-mm-dd hh-mm" Соответственно путь сохранения копии должен сохранятся посде выбора папки как и сейчас Код для сохранения в формате "Name yy-mm-dd hh-mm" прилагаю ниже.
[vba]
Код
Private Sub CommandButton5_Click() 'Резервное копирование с датой и временем копирования в папку D:/BACUP Dim x As String Dim strDate, strPath, BookName, bookextension, j, FileNameXls 'объявили переменные
strPath = " D:\BACUP" 'папка для сохранения резервной копии If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время strDate = Format(Now, "yy-mm-dd hh-mm") 'WorkbookName() BookName = ActiveWorkbook.Name 'задаем расширение по умолчанию если файл еще ни разу не сохранялся If Application.Version = "12.0" Or Application.Version = "14.0" Then bookextension = "xlsx" Else bookextension = "xls" End If 'вытаскиваем настоящее расширение For j = Len(BookName) To 1 Step -1 If Mid(BookName, j, 1) = "." Then bookextension = Right(BookName, Len(BookName) - j) BookName = Left(BookName, j - 1) Exit For End If Next j 'сохраняем резервную копию FileNameXls = strPath & "\" & BookName & " " & strDate & "." & bookextension ActiveWorkbook.SaveCopyAs Filename:=FileNameXls MsgBox "Создана копия файла " & BookName & " " & strDate & " в папку " & strPath Else 'если путь не существует - выводим сообщение MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical End If End Sub
[/vba]
3 В окне формы длинный путь должен переходить на вторую строчку в окне "Путь для резервной копии " , чтобы его полностью было видно (см. пояснение картинку в приложении к сообщению).
P.S. Все вопросы для одной темы. Если модератор скажет готов создать еще две темы по второму и третьему вопросу. А есть ли смысл? Заранее Спасибо всем кто поможет.
Доброго здоровья всем или Здравствуйте.
Скажу сразу, что авто сохранение мне не подходит по нескольким причинам. Есть форма по созданию резервных копий книги. Все что можно доработал под себя, а оставшиеся вопросы решить пока не могу. Вопросы следующие:
1 Из модуля все убрать (при необходимости) в форму, чтобы она работала без модуля Module_SaveBook 2 Заменить "Использовать BAK расширение" на "Использовать формат Name yy-mm-dd hh-mm" Соответственно путь сохранения копии должен сохранятся посде выбора папки как и сейчас Код для сохранения в формате "Name yy-mm-dd hh-mm" прилагаю ниже.
[vba]
Код
Private Sub CommandButton5_Click() 'Резервное копирование с датой и временем копирования в папку D:/BACUP Dim x As String Dim strDate, strPath, BookName, bookextension, j, FileNameXls 'объявили переменные
strPath = " D:\BACUP" 'папка для сохранения резервной копии If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время strDate = Format(Now, "yy-mm-dd hh-mm") 'WorkbookName() BookName = ActiveWorkbook.Name 'задаем расширение по умолчанию если файл еще ни разу не сохранялся If Application.Version = "12.0" Or Application.Version = "14.0" Then bookextension = "xlsx" Else bookextension = "xls" End If 'вытаскиваем настоящее расширение For j = Len(BookName) To 1 Step -1 If Mid(BookName, j, 1) = "." Then bookextension = Right(BookName, Len(BookName) - j) BookName = Left(BookName, j - 1) Exit For End If Next j 'сохраняем резервную копию FileNameXls = strPath & "\" & BookName & " " & strDate & "." & bookextension ActiveWorkbook.SaveCopyAs Filename:=FileNameXls MsgBox "Создана копия файла " & BookName & " " & strDate & " в папку " & strPath Else 'если путь не существует - выводим сообщение MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical End If End Sub
[/vba]
3 В окне формы длинный путь должен переходить на вторую строчку в окне "Путь для резервной копии " , чтобы его полностью было видно (см. пояснение картинку в приложении к сообщению).
P.S. Все вопросы для одной темы. Если модератор скажет готов создать еще две темы по второму и третьему вопросу. А есть ли смысл? Заранее Спасибо всем кто поможет.Otter
Без общего модуля где-нибудь (в рабочей книге, в персональной книге), где определяются пользовательские классы и типы - все равно не обойтись, потому что в локальных модулях (листов, форм) - глобальные типы не определить Для таких возможностей (я так понимаю, что вы хотите сделать свой бэкапинг глобальным для любых файлов Excel у себя на компе) как раз и используются предусмотренные механизмы - персональные книги, надстройки... И совершенно необязательно использовать системные функции... а также писать данные в реестр Windows Вы бы все же рассказали, что за систему предполагаете сделать. Вернее, что это у вас за бэкапинг. А то, может, всё намного проще делается, чем вы придумали.
Без общего модуля где-нибудь (в рабочей книге, в персональной книге), где определяются пользовательские классы и типы - все равно не обойтись, потому что в локальных модулях (листов, форм) - глобальные типы не определить Для таких возможностей (я так понимаю, что вы хотите сделать свой бэкапинг глобальным для любых файлов Excel у себя на компе) как раз и используются предусмотренные механизмы - персональные книги, надстройки... И совершенно необязательно использовать системные функции... а также писать данные в реестр Windows Вы бы все же рассказали, что за систему предполагаете сделать. Вернее, что это у вас за бэкапинг. А то, может, всё намного проще делается, чем вы придумали.AndreTM
Да обычный бекап. Сделал работающую версию файла в процессе доработки и делаю промежуточный бекап, чтобы продвинуться дальше и иметь более свежую сохраненку. Форма не моя просто под себя решил доделать. А код который выложил работает, только хотелось его доработать в выборе папки для сохранения..
Ну а насчет проще думаю так: Автоматом в папке откуда запущен, сохраняемый файл (Книга) создается папка "Имя файла_bekup" и в нее сохраняются в будущем файлы в формате Имя файла_yy-mm-dd hh-mm. Тогда самое оно будет. Никаких заморочек с окнами и формами. Нажал кнопку и получаешь сообщение Имя файла_yy-mm-dd hh-mm создан в папке: полный путь к папке. Как то так надо.
Цитата
Там "половина" лишнего..
Согласен. Как начинаю удалять так сразу перестает работать форма.
Да обычный бекап. Сделал работающую версию файла в процессе доработки и делаю промежуточный бекап, чтобы продвинуться дальше и иметь более свежую сохраненку. Форма не моя просто под себя решил доделать. А код который выложил работает, только хотелось его доработать в выборе папки для сохранения..
Ну а насчет проще думаю так: Автоматом в папке откуда запущен, сохраняемый файл (Книга) создается папка "Имя файла_bekup" и в нее сохраняются в будущем файлы в формате Имя файла_yy-mm-dd hh-mm. Тогда самое оно будет. Никаких заморочек с окнами и формами. Нажал кнопку и получаешь сообщение Имя файла_yy-mm-dd hh-mm создан в папке: полный путь к папке. Как то так надо.
Цитата
Там "половина" лишнего..
Согласен. Как начинаю удалять так сразу перестает работать форма.Otter
Сообщение отредактировал Otter - Воскресенье, 31.05.2015, 15:09
Otter, а что мешало вам самому это сделать? Ведь у вас для этого все было...
Я же написал ума не хватает пока. Поверьте несколько часов возился с формой пока надеялся ее запустить. Вроде и код небольшой...
KSV Спасибо за помощь. Ваш вариант работает, только: 1 расширение файла некорректно делает. Когда делает сохраненку расширение xlsx, а должно быть как у файла родителя т.е. xlsm 2 если отжать кнопку "Использовать формат Name yy-mm-dd hh-mm", чтобы сохранить файл с произвольным именем, то сохранение не происходит. Получаем ошибку.
AndreTM на Ваше
Цитата
Без общего модуля где-нибудь (в рабочей книге, в персональной книге), где определяются пользовательские классы и типы - все равно не обойтись, потому что в локальных модулях (листов, форм) - глобальные типы не определить ...
Может Вы и правы только посмотрите на пример KSV он сделал без модуля как надо. Осталось совсем немного подправить.
Цитата
Otter, а что мешало вам самому это сделать? Ведь у вас для этого все было...
Я же написал ума не хватает пока. Поверьте несколько часов возился с формой пока надеялся ее запустить. Вроде и код небольшой...
KSV Спасибо за помощь. Ваш вариант работает, только: 1 расширение файла некорректно делает. Когда делает сохраненку расширение xlsx, а должно быть как у файла родителя т.е. xlsm 2 если отжать кнопку "Использовать формат Name yy-mm-dd hh-mm", чтобы сохранить файл с произвольным именем, то сохранение не происходит. Получаем ошибку.
AndreTM на Ваше
Цитата
Без общего модуля где-нибудь (в рабочей книге, в персональной книге), где определяются пользовательские классы и типы - все равно не обойтись, потому что в локальных модулях (листов, форм) - глобальные типы не определить ...
Может Вы и правы только посмотрите на пример KSV он сделал без модуля как надо. Осталось совсем немного подправить.Otter
Сообщение отредактировал Otter - Воскресенье, 31.05.2015, 15:50
если отжать кнопку "Использовать формат Name yy-mm-dd hh-mm", чтобы сохранить фал с произвольным именем
а что значит "с произвольным именем"? если отжать кнопку "Использовать формат...", то оригинальный файл должен просто сохраняться в выбранной папке?
[p.s.]Только что проверил (раньше не проверял) - при неотмеченном чекбоксе копия сохраняется в выбранной папке. А если пользователь выбирет ту же папку, где лежит оригинальный файл и при этом не отметит чекбокс, нужно "ругаться", чтобы он выбрал другую папку или молча сохранить ТОЛЬКО оригинальный файл?[/p.s.]
если отжать кнопку "Использовать формат Name yy-mm-dd hh-mm", чтобы сохранить фал с произвольным именем
а что значит "с произвольным именем"? если отжать кнопку "Использовать формат...", то оригинальный файл должен просто сохраняться в выбранной папке?
[p.s.]Только что проверил (раньше не проверял) - при неотмеченном чекбоксе копия сохраняется в выбранной папке. А если пользователь выбирет ту же папку, где лежит оригинальный файл и при этом не отметит чекбокс, нужно "ругаться", чтобы он выбрал другую папку или молча сохранить ТОЛЬКО оригинальный файл?[/p.s.]KSV
А если пользователь выбирет ту же папку, где лежит оригинальный файл и при этом не отметит чекбокс, нужно "ругаться", чтобы он выбрал другую папку или молча сохранить ТОЛЬКО оригинальный файл?
Можно конечно и так, но лучше как мои пожелания ниже.
Цитата
молча сохранить только оригинальный файл (.Save)
Большое СПАСИБО за ответы.
Цитата
А если пользователь выбирет ту же папку, где лежит оригинальный файл и при этом не отметит чекбокс, нужно "ругаться", чтобы он выбрал другую папку или молча сохранить ТОЛЬКО оригинальный файл?
Можно конечно и так, но лучше как мои пожелания ниже.
Да так, но пока файл открыт он не позволит перезаписать сам себя
вы ошибаетесь... вот эта строчка в вашем коде сохраняет ваш открытый файл [vba]
Код
ActiveWorkbook.Save
[/vba]
а вот КОПИЮ (методом: .SaveCopyAs) нельзя сохранить в той же папке и с тем же именем, что и оригинальный файл, поэтому я и спросил, как поступать в этом случае - молча сохранить только оригинальный файл (.Save) или "заставить" пользователя выбрать другую папку для сохранения?
Да так, но пока файл открыт он не позволит перезаписать сам себя
вы ошибаетесь... вот эта строчка в вашем коде сохраняет ваш открытый файл [vba]
Код
ActiveWorkbook.Save
[/vba]
а вот КОПИЮ (методом: .SaveCopyAs) нельзя сохранить в той же папке и с тем же именем, что и оригинальный файл, поэтому я и спросил, как поступать в этом случае - молча сохранить только оригинальный файл (.Save) или "заставить" пользователя выбрать другую папку для сохранения?KSV
[/vba] Все получилось кроме strPath. Что надо изменить, чтобы писался путь сохранения файла. В моем варианте кода он постоянный и четко прописан как strPath = " D:\BACUP" , а здесь что то другое. Пробую писать path, но чего то путь не пишет. Может потому, что путь длинный и не умещается? Тогда как быть?
[/vba] Все получилось кроме strPath. Что надо изменить, чтобы писался путь сохранения файла. В моем варианте кода он постоянный и четко прописан как strPath = " D:\BACUP" , а здесь что то другое. Пробую писать path, но чего то путь не пишет. Может потому, что путь длинный и не умещается? Тогда как быть?Otter