Страницы: 1
RSS
Макрос резервного копирования. Отобразить скрыте листы в копии
 
Добрый день!
Нашёл на форуме макрос, который при закрытие файла создаёт резервную копию файла в xls. формате в определённую директорию.
Файл в котором записан код со скрытыми листами.
задача моя следующая:
-что нужно дописать в макросе что бы файл при закрытие создавал резервную копию, НО отображал бы в сохранёном файле все скрытые листы?
-Что нужно дописать чтобы при каждом закрытие файла файл сохранялся автоматически, и не выдавал окошко"Сохранить?"??
Ниже код, так же я записал его в приложенном файле:


Код
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Dim strPath$: strPath = "C:\Users\wm4\Desktop\примеры ЭКСЕЛЬ\"
 With ThisWorkbook
 If Dir(strPath) <> Empty Then
 .SaveCopyAs (strPath & " " & Range("D3"  ;)  & ".xls"  ;)  
 Else
 MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical
 End If
 End With
End Sub
 
немного поправлю свой вопрос:

-что нужно дописать в макросе что бы файл при закрытие создавал резервную копию, НО отображал бы в сохранённой копии все скрытые листы?
 
Много нужно дописать.
Анализ какие листы скрыты, запоминаем, все открываем, делаем SaveCopyAs, скрываем что запомнили.
Хотя можно так (если можно) - сохраняем файл, открываем листы, делаем SaveCopyAs, закрываем без сохранения.
Вообще вероятно делать копию стОит не при закрытии, а при сохранении - зачем делать копию того, что возможно было понаписано зря?
Изменено: Hugo - 12.05.2013 12:12:40
 
этот файл сохраняется с именем из ячейки(дата), и если сохранёная копия называется именем которое уже есть в директории то копия пересохраняется(заменяется).
Нужно что бы копия сохранялась с уже с отображёнными листами.
Не очень разбираюсь в макросах, тоесть это можно записать в коде?
 
Циклом бежим по всем листа и делаем их видимыми.
 
Для общего образования:
Как сделать лист очень скрытым
Если прочитать внимательно до конца - можно найти код цикла по листам и чуть переделать:
Код
Dim wsSh As Object
For Each wsSh In ActiveWorkbook.Sheets
     wsSh.Visible = xlSheetVisible
Next wsSh
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Подумайте логически - Вы делаете копию файла в том состоянии, какое есть на момент изготовления этой копии.
Т.е. если нужны открытые листы - из нужно сперва все открыть. И так оно и останется, если не что-то предпринять.
Я бы сперва определился с алгоритмом в зависимости от неизвестной нам задачи, а затем уж писал код.
 
Вариант: чтобы не запоминать комбинацию видимых/скрытых листов для их последующего восстановления в исходном файле, можно сохранить "как есть", затем открыть копию и уже в ней отобразить циклом все листы.
Страницы: 1
Наверх