Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для сохранения защищенного листа с возвратом защиты - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для сохранения защищенного листа с возвратом защиты (Макросы/Sub)
Макрос для сохранения защищенного листа с возвратом защиты
garbol Дата: Пятница, 29.03.2024, 13:57 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Зашел на сайт. Почитал сообщение о владельце... СОБОЛЕЗНУЕМ
Что будет с сайтом?

Помогите пож. написать макрос, т.к. с ними пока не очень, с такой возможностью: на защищенном листе с формулами, нужно сохранить лист, чтобы он был сохранен без формул в отдельный файл, но при этом изначальный файл что бы опять стал защищенным. Нашел и пользуюсь макросом который выполняет мои задачи, только не могу сделать чтобы изначальный файл оставался защищенным. Заранее благодарю.

Пользуюсь таким:
[vba]
Код
Sub сохранитьлист1()
ActiveSheet.Unprotect Password:="111" 'Снять защиту с паролем 111
Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n
Ar = Array(1) 'порядковые номера сохраняемых листов с формулами
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1)
For Each Sh In ThisWorkbook.Worksheets
ArAll(n) = Sh.Index
n = n + 1
Next
ThisWorkbook.Worksheets(ArAll).Copy
ActiveWorkbook.Sheets(Ar(0)).Activate
Application.Volatile
Application.Calculate
Application.ScreenUpdating = False
For Each n In Ar
With ActiveWorkbook.Worksheets(n).UsedRange.Cells
.Value = .Value
End With
Next
Erase ArAll: n = 0
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1 - (UBound(Ar) + 1))
For Each Sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(Sh.Index, Ar, 0)) Then
ArAll(n) = Sh.Index
n = n + 1
End If
Next
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(ArAll).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Dialogs(xlDialogSaveAs).Show
End Sub
[/vba]
К сообщению приложен файл: primer_dlja_makrosa.xlsm (266.6 Kb)
 
Ответить
СообщениеЗашел на сайт. Почитал сообщение о владельце... СОБОЛЕЗНУЕМ
Что будет с сайтом?

Помогите пож. написать макрос, т.к. с ними пока не очень, с такой возможностью: на защищенном листе с формулами, нужно сохранить лист, чтобы он был сохранен без формул в отдельный файл, но при этом изначальный файл что бы опять стал защищенным. Нашел и пользуюсь макросом который выполняет мои задачи, только не могу сделать чтобы изначальный файл оставался защищенным. Заранее благодарю.

Пользуюсь таким:
[vba]
Код
Sub сохранитьлист1()
ActiveSheet.Unprotect Password:="111" 'Снять защиту с паролем 111
Dim Ar(), ArAll&(), Sh As Excel.Worksheet, n
Ar = Array(1) 'порядковые номера сохраняемых листов с формулами
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1)
For Each Sh In ThisWorkbook.Worksheets
ArAll(n) = Sh.Index
n = n + 1
Next
ThisWorkbook.Worksheets(ArAll).Copy
ActiveWorkbook.Sheets(Ar(0)).Activate
Application.Volatile
Application.Calculate
Application.ScreenUpdating = False
For Each n In Ar
With ActiveWorkbook.Worksheets(n).UsedRange.Cells
.Value = .Value
End With
Next
Erase ArAll: n = 0
ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1 - (UBound(Ar) + 1))
For Each Sh In ActiveWorkbook.Worksheets
If IsError(Application.Match(Sh.Index, Ar, 0)) Then
ArAll(n) = Sh.Index
n = n + 1
End If
Next
Application.DisplayAlerts = False
ActiveWorkbook.Worksheets(ArAll).Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Application.Dialogs(xlDialogSaveAs).Show
End Sub
[/vba]

Автор - garbol
Дата добавления - 29.03.2024 в 13:57
MikeVol Дата: Суббота, 30.03.2024, 03:21 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
garbol, Доброго времени суток. Дополнение к вашему коду:
[vba]
Код

    ' Остальной код ваш код
    Application.Dialogs(xlDialogSaveAs).Show
    
    ' Закрываем вновь созданную книгу
    ActiveWorkbook.Close

    ' Защита исходного листа снова
    ActiveSheet.Protect Password:="111"
End Sub
[/vba]
Удачи.


Ученик.
 
Ответить
Сообщениеgarbol, Доброго времени суток. Дополнение к вашему коду:
[vba]
Код

    ' Остальной код ваш код
    Application.Dialogs(xlDialogSaveAs).Show
    
    ' Закрываем вновь созданную книгу
    ActiveWorkbook.Close

    ' Защита исходного листа снова
    ActiveSheet.Protect Password:="111"
End Sub
[/vba]
Удачи.

Автор - MikeVol
Дата добавления - 30.03.2024 в 03:21
MikeVol Дата: Суббота, 30.03.2024, 22:32 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
garbol, Доброго времени суток. Раздобыл я ваш файл пример. Для вашего случая если у вас всего один лист в книге как в примере то при использования вашего макроса что у вас в файле то будет ошибка, так как у вас нет массива листов. Вот код только для одного листа в книге:

Я прокомментировал строки кода чтоб вы могли понимать что, куда и зачем.
А вот ваш код из поста с комментариями:

Удачи.


Ученик.

Сообщение отредактировал MikeVol - Суббота, 30.03.2024, 22:34
 
Ответить
Сообщениеgarbol, Доброго времени суток. Раздобыл я ваш файл пример. Для вашего случая если у вас всего один лист в книге как в примере то при использования вашего макроса что у вас в файле то будет ошибка, так как у вас нет массива листов. Вот код только для одного листа в книге:

Я прокомментировал строки кода чтоб вы могли понимать что, куда и зачем.
А вот ваш код из поста с комментариями:

Удачи.

Автор - MikeVol
Дата добавления - 30.03.2024 в 22:32
garbol Дата: Четверг, 11.04.2024, 16:07 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Option Explicit

' Сохранение исходного листа без формул в отдельный файл
Sub сохранитьлист1()

    ' Снятие защиты с листа
    ActiveSheet.Unprotect Password:="111"

    ' Порядковые номера сохраняемых листов с формулами
    Dim Ar(), ArAll() As Long, Sh As Worksheet, n As Variant
    Ar = Array(1)
    ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1)

    ' Получение порядковых номеров всех листов
    For Each Sh In ThisWorkbook.Worksheets
        ArAll(n) = Sh.Index
        n = n + 1
    Next

    ' Копирование листов с формулами в новую рабочую книгу
    ThisWorkbook.Worksheets(ArAll).Copy
    ActiveWorkbook.Sheets(Ar(0)).Activate
    Application.Volatile
    Application.Calculate
    Application.ScreenUpdating = False

    ' Замена формул на значения на сохраненных листах
    For Each n In Ar

        With ActiveWorkbook.Worksheets(n).UsedRange.Cells
            .Value = .Value
        End With

    Next

    ' Удаление ненужных листов из нового файла
    Erase ArAll: n = 0
    ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1 - (UBound(Ar) + 1))

    For Each Sh In ActiveWorkbook.Worksheets

        If IsError(Application.Match(Sh.Index, Ar, 0)) Then
            ArAll(n) = Sh.Index
            n = n + 1
        End If

    Next

    ' Сохранение нового файла
    Application.DisplayAlerts = False
    ActiveWorkbook.Worksheets(ArAll).Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Application.Dialogs(xlDialogSaveAs).Show

    ' Закрываем вновь созданную книгу
    ActiveWorkbook.Close

    ' Защита исходного листа снова
    ActiveSheet.Protect Password:="111"
End Sub

Добрый. Что то стала ошибка выскакивать subscript out of range на эту строку ActiveWorkbook.Worksheets(ArAll).Delete, что это значит, в нете ответа не нашел. Благодарю.
 
Ответить
Сообщение
Option Explicit

' Сохранение исходного листа без формул в отдельный файл
Sub сохранитьлист1()

    ' Снятие защиты с листа
    ActiveSheet.Unprotect Password:="111"

    ' Порядковые номера сохраняемых листов с формулами
    Dim Ar(), ArAll() As Long, Sh As Worksheet, n As Variant
    Ar = Array(1)
    ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1)

    ' Получение порядковых номеров всех листов
    For Each Sh In ThisWorkbook.Worksheets
        ArAll(n) = Sh.Index
        n = n + 1
    Next

    ' Копирование листов с формулами в новую рабочую книгу
    ThisWorkbook.Worksheets(ArAll).Copy
    ActiveWorkbook.Sheets(Ar(0)).Activate
    Application.Volatile
    Application.Calculate
    Application.ScreenUpdating = False

    ' Замена формул на значения на сохраненных листах
    For Each n In Ar

        With ActiveWorkbook.Worksheets(n).UsedRange.Cells
            .Value = .Value
        End With

    Next

    ' Удаление ненужных листов из нового файла
    Erase ArAll: n = 0
    ReDim Preserve ArAll(0 To ThisWorkbook.Worksheets.Count - 1 - (UBound(Ar) + 1))

    For Each Sh In ActiveWorkbook.Worksheets

        If IsError(Application.Match(Sh.Index, Ar, 0)) Then
            ArAll(n) = Sh.Index
            n = n + 1
        End If

    Next

    ' Сохранение нового файла
    Application.DisplayAlerts = False
    ActiveWorkbook.Worksheets(ArAll).Delete
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
    Application.Dialogs(xlDialogSaveAs).Show

    ' Закрываем вновь созданную книгу
    ActiveWorkbook.Close

    ' Защита исходного листа снова
    ActiveSheet.Protect Password:="111"
End Sub

Добрый. Что то стала ошибка выскакивать subscript out of range на эту строку ActiveWorkbook.Worksheets(ArAll).Delete, что это значит, в нете ответа не нашел. Благодарю.

Автор - garbol
Дата добавления - 11.04.2024 в 16:07
MikeVol Дата: Пятница, 12.04.2024, 00:47 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
garbol, Добрый. Замените эту строку:[vba]
Код
     Dim Ar(), ArAll() As Long, Sh As Worksheet, n As Variant
[/vba] на:[vba]
Код
     Dim Ar(), ArAll(), Sh As Worksheet, n As Variant
[/vba]
P.S. Оперативно вы однако отвечаете, не прошло и месяца...


Ученик.
 
Ответить
Сообщениеgarbol, Добрый. Замените эту строку:[vba]
Код
     Dim Ar(), ArAll() As Long, Sh As Worksheet, n As Variant
[/vba] на:[vba]
Код
     Dim Ar(), ArAll(), Sh As Worksheet, n As Variant
[/vba]
P.S. Оперативно вы однако отвечаете, не прошло и месяца...

Автор - MikeVol
Дата добавления - 12.04.2024 в 00:47
garbol Дата: Пятница, 12.04.2024, 08:17 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
Благодарю. Попробую. Так кажется все работало, да и этой кнопкой не так часто пользуюсь.
 
Ответить
СообщениеБлагодарю. Попробую. Так кажется все работало, да и этой кнопкой не так часто пользуюсь.

Автор - garbol
Дата добавления - 12.04.2024 в 08:17
garbol Дата: Понедельник, 15.04.2024, 17:42 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
garbol,Прошу Вас не ругаться, но опять продолжаю данную тему, и прошу Вас еще помочь, если это возможно, доработать данный макрос, что бы он удалял условное форматирование на сохраненном листе. Благодарю. Да Ваш код из поста №3 работает на УРА. Благодарю, сразу не разобрался просто.
 
Ответить
Сообщениеgarbol,Прошу Вас не ругаться, но опять продолжаю данную тему, и прошу Вас еще помочь, если это возможно, доработать данный макрос, что бы он удалял условное форматирование на сохраненном листе. Благодарю. Да Ваш код из поста №3 работает на УРА. Благодарю, сразу не разобрался просто.

Автор - garbol
Дата добавления - 15.04.2024 в 17:42
MikeVol Дата: Вторник, 16.04.2024, 17:07 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
[vba]
Код

' Заменяем формулы на значения а также удаляем условное форматирование
With newWorkbook.Sheets(1).UsedRange.Cells
.Value = .Value
.FormatConditions.Delete
End With
[/vba]
Я и не сомневался что код рабочий...


Ученик.

Сообщение отредактировал MikeVol - Вторник, 16.04.2024, 17:10
 
Ответить
Сообщение[vba]
Код

' Заменяем формулы на значения а также удаляем условное форматирование
With newWorkbook.Sheets(1).UsedRange.Cells
.Value = .Value
.FormatConditions.Delete
End With
[/vba]
Я и не сомневался что код рабочий...

Автор - MikeVol
Дата добавления - 16.04.2024 в 17:07
garbol Дата: Четверг, 18.04.2024, 11:32 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 42
Репутация: 0 ±
Замечаний: 0% ±

Excel 2016
MikeVol, Огромная БАГОДАРНОСТЬ за ответы. Опять я. Можно еще макрос усовершенствовать, что бы он сохранял разрешения для форматирования ячеек, столбцов, строк при повторной защите изначального листа. БЛАГО Дарю.
 
Ответить
СообщениеMikeVol, Огромная БАГОДАРНОСТЬ за ответы. Опять я. Можно еще макрос усовершенствовать, что бы он сохранял разрешения для форматирования ячеек, столбцов, строк при повторной защите изначального листа. БЛАГО Дарю.

Автор - garbol
Дата добавления - 18.04.2024 в 11:32
MikeVol Дата: Пятница, 19.04.2024, 00:44 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 315
Репутация: 61 ±
Замечаний: 0% ±

Excel LTSC 2021 EN
garbol, Доброго времени суток. Можно конечно:
Вариант #1: Включаете запись макроса (Макрорекордер), делаете все интересующие вас манипуляции с защитой листа (форматирование, выделение защищённых ячеек и т.д.). Останавливаете запись макроса, заходите в редактор VBE и находите записанный вами ваш макрос. Выделяете нужную вам строку и вставляете её (скопированую строку) в блок ActiveSheet.Protect кода моего макроса.
Вариант #2: Ищем и учимся по статьям в интернете. К примеру: Вот хорошая статья о Защите Листа
И конечно куда же мы без Справки от Microsoft. Думаю вы сами разберётесь с такими пустякам. Удачи.


Ученик.
 
Ответить
Сообщениеgarbol, Доброго времени суток. Можно конечно:
Вариант #1: Включаете запись макроса (Макрорекордер), делаете все интересующие вас манипуляции с защитой листа (форматирование, выделение защищённых ячеек и т.д.). Останавливаете запись макроса, заходите в редактор VBE и находите записанный вами ваш макрос. Выделяете нужную вам строку и вставляете её (скопированую строку) в блок ActiveSheet.Protect кода моего макроса.
Вариант #2: Ищем и учимся по статьям в интернете. К примеру: Вот хорошая статья о Защите Листа
И конечно куда же мы без Справки от Microsoft. Думаю вы сами разберётесь с такими пустякам. Удачи.

Автор - MikeVol
Дата добавления - 19.04.2024 в 00:44
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для сохранения защищенного листа с возвратом защиты (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!