Страницы: 1
RSS
Автосохраняемый файл в путь из ячейки, Макрос на автосохранение конкретного файла
 
Друзья, добрый день.

Помогите пожалуйста познать особенности 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


Подскажите пожалуйста, где ошибка и как сделать что бы сохранялось.

Спасибо.
Изменено: phelex - 22.10.2017 09:11:28
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
phelex, код следует оформлять соответствующим тегом. Ищите такую кнопку <...> и исправьте своё сообщение.
 
Для сохранения резервной копии - есть встроенная опция. Зачем огород городить?
Файл - Сохранить как - Сервис - Общие параметры - Поставить галочку "Всегда создавать резервную копию".
По Вашему коду - как минимум 2 ошибки. Range замените на Cells, замените / на \ и уберите лишние /
Не стал до конца разбирать Ваш код, поскольку пока не вижу в этом смысла.
Всё сложное - не нужно. Всё нужное - просто /М. Т. Калашников/
 
Цитата
Михаил Лебедев написал: уберите лишние /
и двоеточие недопустимо в имени файла
Согласие есть продукт при полном непротивлении сторон
 
Михаил Лебедев, спасибо за комментарии.

Цель данного кода не создать резервную копию.
Этот лист это форма отчета, который хранится у пользователей.
В какой то момент мне понадобиться собрать отчет со всех пользователей, и что бы не просить их выслать, нашел такое решение. Что бы все сохраненные версии дублировались мне на сервер, насколько я знаю нет штатной функции.

Про правки понял, но как же сделать автозапуск скрипта при сохранени пользователем?  
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Цитата
phelex написал:
но как же сделать автозапуск скрипта при сохранени пользователем?
модуль книги
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

End Sub
Изменено: Ivan.kh - 22.10.2017 09:21:58
 
Ivan.kh, спасибо!
Sanja, А как если путь содержит диск и ":" как быть?
Изменено: phelex - 22.10.2017 13:18:22
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
так и будьте (двоеточие в пути к файлу - это не в имени файла)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Код
FileName:=FileName
- как-то подозрительно выглядит, я бы не использовал такое имя переменной.
И кстати Name - это тоже уже зарезервированное имя.
 
Ігор Гончаренко,спасибо.

Друзья, получилась такая конструкция:
Код
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 файл сохраняется  (но почему то не работает с папками, закоменчено)
А при коде в модуле файла и сохранении вообще не срабатывает.

В чем может быть проблема?

Больше спасибо за ваши советы.
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
phelex, обратите внимание на #9. Я про имена переменных.
 
Друзья, исправил переменные:
Код
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
В ручной запуск работает, после чего работа продолжается с сохраненной на сервер версией (а должна продолжаться с файлом в котором я работаю).
При сохранить / сохранить как макрос не срабатывает.

Возможно вы подскажите что я делаю не так.

Спасибо
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Используйте SaveCopyAs
 
Hugo, переписал.
Не сработало:
Код
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.SaveCopyAs FileName:=FinalN, FileFormat:= _
        xlExcel12, CreateBackup:=False
 End Sub
Подскажите, пожалуйста какие еще могут быть версии?
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
что значит не сработало???
появился вопрос: такой файл уже есть заменить?
Да
Нет
Отмена
жмете ДА и все сработало (но старого файла теперь нет))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Да всё работает, только нужно делать по правилам:
1. Почитать про синтаксис:
Цитата
Syntax
expression.SaveCopyAs(Filename)
expression   A variable that represents a Workbook object.
2. Правильно располдожить код, т.е. там где положено, т.е. в модуле книги.
 
Hugo, по пункту 2 понял. Прошу прощения не сразу понял.
А про синтаксис вроде все верно (на основании примеров и форумов).
Что именно не так?
Код
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

 Workbooks.Application.DisplayAlerts = False

 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 & Reg & "\" & ProgectName & ".xls"
    ActiveWorkbook.SaveAs FileName:=FinalN, FileFormat:=_
xlExcel12, CreateBackup:=False

   Workbooks.Application.DisplayAlerts = True

End Sub

Как я понял, скрипт стал срабатывать на сохранение при нажатии (сохранить), но при запуске выдает ошибку.
Помогите понять почему, спасибо :)
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
.SaveAs<>SaveCopyAs
это я про синтаксис.
Вы определитесь что делаете :)
 
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 вылетает :(

Друзья, помогите пожалуйста с финальным кодом.
Правда шишек уже набил и взгляд замыслился.
Возможно вы еще знаете как настроить путь к сетевой папке?
невозможное делаем сразу, чудо - требует небольшой подготовки.
 
Тему вверх, а то решения так и нет.
невозможное делаем сразу, чудо - требует небольшой подготовки.
Страницы: 1
Наверх