Помогите пожалуйста познать особенности VBA: Необходимо что бы файл при сохранении, сохранял свою резервную копию в формате xlsx не спрашивая, а сразу заменяя файл с одинаковым именем. При этом путь и название формируется из данных ячеек.
Что не нашел как сделать: 1) Как задать выполнение скрипта при сохранении книги пользователем? 2) Как сделать что бы сохранение происходило с заменой без участия пользователя? (в формате xlsx, при этом при последующем сохрани пользователя через "Сохранить" должно сохранять в свой экземпляр.
В данный момент вот такой пример: Не работает, почему пока не понял. Код:
Код
Sub Save()
Dim Puth, Reg, Name, FileName As String
Puth = Sheets("SETTING").Range(1, 2)
Reg = Sheets("REPORT").Range(2, 1)
Name = Sheets("REPORT").Range(2, 2)
FileName = Puth & "/" & Reg & "/" & Name & ".xlsx"
ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:= _
xlExcel12, CreateBackup:=False
End Sub
Подскажите пожалуйста, где ошибка и как сделать что бы сохранялось.
Для сохранения резервной копии - есть встроенная опция. Зачем огород городить? Файл - Сохранить как - Сервис - Общие параметры - Поставить галочку "Всегда создавать резервную копию". По Вашему коду - как минимум 2 ошибки. Range замените на Cells, замените / на \ и уберите лишние / Не стал до конца разбирать Ваш код, поскольку пока не вижу в этом смысла.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
Цель данного кода не создать резервную копию. Этот лист это форма отчета, который хранится у пользователей. В какой то момент мне понадобиться собрать отчет со всех пользователей, и что бы не просить их выслать, нашел такое решение. Что бы все сохраненные версии дублировались мне на сервер, насколько я знаю нет штатной функции.
Про правки понял, но как же сделать автозапуск скрипта при сохранени пользователем?
невозможное делаем сразу, чудо - требует небольшой подготовки.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Puth, Reg, Name, FileName As String
Puth = Sheets("SETTING").Cells(1, 2)
Reg = Sheets("REPORT").Cells(2, 1)
Name = Sheets("REPORT").Cells(2, 2)
'FileName = Puth & Reg & "\" & Name & ".xlsx"
FileName = Puth & Name & ".xls"
ActiveWorkbook.SaveAs FileName:=FileName, FileFormat:= _
xlExcel12, CreateBackup:=False
End Sub
При активации макроса Auto файл сохраняется (но почему то не работает с папками, закоменчено) А при коде в модуле файла и сохранении вообще не срабатывает.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim Puth, Reg, FinalN, ProgectName As String
Puth = Sheets("SETTING").Cells(1, 2)
Reg = Sheets("REPORT").Cells(2, 1)
ProgectName = Sheets("REPORT").Cells(2, 2)
'FileName = Puth & Reg & "\" & Name & ".xlsx"
FinalN = Puth & ProgectName & ".xls"
ActiveWorkbook.SaveAs FileName:=FinalN, FileFormat:= _
xlExcel12, CreateBackup:=False
End Sub
В ручной запуск работает, после чего работа продолжается с сохраненной на сервер версией (а должна продолжаться с файлом в котором я работаю). При сохранить / сохранить как макрос не срабатывает.
Hugo, верно ли я понимаю: Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) - что это "До сохранения" без указания "Сохранить как" или просто "Сохранить"?
Судя по всему я делаю SaveCopyAs
Выдает новую ошибку что все не работает
При использовании SaveAs, файл сохраняется, но и работа с файлом переходит на копию (а не оригинал). При повторном сохранении все зависает и вылетает, как я понимаю сталкивается с конфликтом "Заменить файл"?
При попытке переписать под SaveCopyAs выдает ошибку (скрин во вложении).
Код:
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim x, Puth, Reg, FinalN, ProgectName As String
Application.DisplayAlerts = False
Reg = Sheets("REPORT").Cells(1, 2)
ProgectName = Sheets("REPORT").Cells(2, 2)
'ActiveWorkbook.Save
Puth = "C:\Users\sergey.yurin\Downloads\ServerTest\"
FinalN = Puth & Reg & "\" & ProgectName & ".xls"
ActiveSheet.Range("A5").Value = FinalN
ActiveWorkbook.SaveAs Filename:=FinalN, FileFormat:= _
xlExcel12, CreateBackup:=False
Application.DisplayAlerts = True
End Sub
Код создает копию а потом Excel вылетает
Друзья, помогите пожалуйста с финальным кодом. Правда шишек уже набил и взгляд замыслился. Возможно вы еще знаете как настроить путь к сетевой папке?