Макрос в excel отмена всех макросов

Хитрости »

24 Февраль 2012              61065 просмотров


Как отменить действия макроса

Многие из тех, кто программирует в VBA знают, что после действий макроса пропадает возможность отмены действий. И если с отменой тех действий, которые были совершены до выполнения макроса совершенно точно можно распрощаться(невозможно будет это сделать), то отменить действия макроса возможно. И рано или поздно каждый программирующий в VBA задается вопросом: как можно отменить действия, совершенные макросом? Для начала надо понять, в каких ситуациях это нам надо. Например был выполнен код, который испортил или удалил данные в файле, но эти данные еще нужны. Самое простое, что можно сделать это закрыть файл без сохранения и открыть заново. Все данные будут на месте(если, конечно, в коде не было строки, сохраняющей файл). Второй способ: это перед выполнением макроса делать резервную копию файла — тогда Ваши исходные данные всегда будут целы.


Но как же сделать отмену действий макроса через стандартную кнопку на панели или сочетанием клавиш

Ctrl

+

Z

и можно ли? Ответ — можно. Но сразу вопрос: а насколько это нужно? В каких ситуациях это может пригодиться? Я навскидку сразу не сказал бы, если бы не являлся разработчиком программ и надстроек в среде Microsoft Excel. Именно в надстройках отмена действий наиболее востребована, на мой взгляд. Например надстройка объединяет ячейки. Объединили случайно и…В стандартной ситуации после такого макроса нельзя отменить действия. Закрывать файл без сохранения? Как-то некрасиво получается, если продукт является коммерческим. И тогда приходится извращаться и пытаться сделать возможным отмену действий макроса. В моей надстройке MulTEx в некоторых командах отмена действий команд как раз и применяется. Наиболее распространенное решение по отмене действий макроса заключается в запоминании свойств изменяемых ячеек:

'Создаем свой пользовательский тип данных
Type SaveRange
    vFormula As Variant
    sAddr As String
    lColor As Long
    lColorIndex As Long
End Type
'Переменные для запоминания данных
Public wbWBook As Excel.Workbook
Public wsSh As Excel.Worksheet
Public vOldVals() As SaveRange
'---------------------------------------------------------------------------------------
' Procedure : Fill_Numbers
' Purpose   : Основная процедура. Это тот код, который вносит изменения на лист
'             и действия которого нам необходимо отменить
'             Процедура заполняет выделенные ячейки номерами
'             и изменяет цвет заливки
'---------------------------------------------------------------------------------------
Sub Fill_Numbers()
    Dim rCell As Range, li As Long
    '   Сначала запоминаем значения выделенных ячеек на листе
    ReDim vOldVals(1 To Selection.Count)
    'Запоминаем активную книгу
    'это на случай, если отмена действий будет производиться из другой книги
    Set wbWBook = ActiveWorkbook
    'Запоминаем активный лист
    'на случай, если отмена действий будет производиться из другого листа
    Set wsSh = ActiveSheet
    'Запоминаем значения(заносим в массив)
    li = 1
    For Each rCell In Selection
        'запоминаем адрес ячейки
        vOldVals(li).sAddr = rCell.Address
        'запоминаем формулу(если нет формулы - значение)
        vOldVals(li).vFormula = rCell.Formula
        'запоминаем цвет заливки ячейки
        vOldVals(li).lColor = rCell.Interior.Color
        'запоминаем индекс цвета заливки(чтобы на заливать бесцветные ячейки)
        vOldVals(li).lColorIndex = rCell.Interior.ColorIndex
        li = li + 1
    Next rCell
    '======================================
    'Выполняем основные действия(собственно тот код, который надо будет отменить)
    li = 1
    For Each rCell In Selection
        rCell = li
        rCell.Interior.ColorIndex = li
        li = li + 1
    Next rCell
    '======================================
    'Назначаем стандартному вызову отмены действий выполнение нашего макроса возвращения значений
    Application.OnUndo "Отменить заполнение ячеек номерами", "Restore_Vals"
End Sub
 
'---------------------------------------------------------------------------------------
' Procedure : Restore_Vals
' Purpose   : Процедура отмены действия(возврат значений)
'---------------------------------------------------------------------------------------
Sub Restore_Vals()
    Dim li As Long
    'В случае непредвиденной ошибки переходим на метку
    'и показываем сообщение об ошибке
    On Error GoTo Erreble
    'Активируем книгу, в которой были сделаны изменения
    wbWBook.Activate
    'Активируем лист, в котором были сделаны изменения
    wsSh.Activate
    'Возвращаем значения
    For li = 1 To UBound(vOldVals)
        Range(vOldVals(li).sAddr).Formula = vOldVals(li).vFormula
        'если заливка была безцветная, то ColorIndex = xlNone
        'значит выставляем безцветность
        If Not vOldVals(li).lColorIndex = xlNone Then
            Range(vOldVals(li).sAddr).Interior.Color = vOldVals(li).lColor
        Else 'если цвет был - возвращаем его
            Range(vOldVals(li).sAddr).Interior.ColorIndex = xlNone
        End If
    Next li
    Exit Sub
 
    'Показываем сообщение о невозможности отмены действия
Erreble:
    MsgBox "Нельзя отменить действие!", vbCritical, "Error"
End Sub

Комментарии к коду я старался сделать максимально подробными, поэтому думаю, что больше нечего разъяснять. К тому же по древней традиции я приложил к статье пример с данным кодом :) Единственное, что могу добавить: пользовательский тип SaveRange может быть дополнен еще какими-либо переменными, помимо vFormula, sAddr и lColor. Например цвет границ ячейки, цвет шрифта и т.д. Все зависит от того, какие изменения Вы будете делать кодом и что захотите затем вернуть.

Скачать пример

  Отменить действия макроса.xls (62,0 KiB, 3 360 скачиваний)


Код, приведенный выше, несомненно хорош, но если кол-во изменяемых ячеек достаточно велико, то код будет очень замедлять работу. Поэтому если есть возможность добавлять/удалять листы в книгах, то можно схитрить: сделать резервную копию листа, лист сделать очень скрытым и как только потребуется отмена действия — вернуть этот лист, удалив исходный(с уже испорченными данными):

'Переменные для запоминания данных
Public wbWBook As Workbook
Public wsSh As Worksheet, wsActSh As Worksheet, sSh_Name As String, lShPoz As Long
'---------------------------------------------------------------------------------------
' Procedure : Fill_Numbers
' Purpose   : Основная процедура. Это тот код, который вносит изменения на лист
'             и действия которого нам необходимо отменить
'             Процедура заполняет выделенные ячейки номерами
'             и изменяет цвет заливки
'---------------------------------------------------------------------------------------
Sub Fill_Numbers()
    Dim rCell As Range, li As Long
    'Запоминаем активную книгу
    'это на случай, если отмена действий будет производиться из другой книги
    Set wbWBook = ActiveWorkbook
    'Запоминаем активный лист
    'на случай, если отмена действий будет производиться из другого листа
    Set wsActSh = ActiveSheet
    lShPoz = wsActSh.Index
    sSh_Name = wsActSh.Name
    Application.ScreenUpdating = 0
    wsActSh.Copy , wbWBook.Sheets(wbWBook.Sheets.Count)
    Set wsSh = wbWBook.Sheets(wbWBook.Sheets.Count)
    wsSh.Visible = xlVeryHidden
    wsActSh.Activate
    Application.ScreenUpdating = 1
    '======================================
    'Выполняем основные действия(собственно тот код, который надо будет отменить)
    li = 1
    For Each rCell In Selection
        rCell = li
        rCell.Interior.ColorIndex = li
        li = li + 1
    Next rCell
    '======================================
    'Назначаем стандартному вызову отмены действий выполнение нашего макроса возвращения значений
    Application.OnUndo "Отменить заполнение ячеек номерами", "Restore_Vals"
End Sub
 
'---------------------------------------------------------------------------------------
' Procedure : Restore_Vals
' Purpose   : Процедура отмены действия(возврат значений)
'---------------------------------------------------------------------------------------
Sub Restore_Vals()
    'В случае непредвиденной ошибки переходим на метку
    'и показываем сообщение об ошибке
    On Error GoTo Erreble
    Application.ScreenUpdating = 0
    'Активируем книгу, в которой были сделаны изменения
    wbWBook.Activate
    'делаем видимым резервный лист
    wsSh.Visible = -1
    'Удаляем исходный лист, данные в котором уже изменены
    Application.DisplayAlerts = 0
    wsActSh.Delete
    Application.DisplayAlerts = 1
    'назначаем резервному листу имя исходного
    wsSh.Name = sSh_Name
    wsSh.Move wbWBook.Sheets(lShPoz)
    'Активируем резервный лист
    wsSh.Activate
    Application.ScreenUpdating = 0
    Exit Sub
    'Показываем сообщение о невозможности отмены действия
Erreble:
    MsgBox "Нельзя отменить действие!", vbCritical, "www.excel-vba.ru"
End Sub

Скачать пример

  Tips_Restore_Macro_HiddenSh.xls (45,0 KiB, 2 366 скачиваний)

Конечно, в этом приеме тоже есть недостаток — если на этот лист ссылаются формулы из других листов есть большой шанс получить в этих формулах ошибку

#ССЫЛКА!(#REF!)

, т.к. исходный лист удаляется.
В этом случае можно из резервного листа копировать все ячейки и вставлять на рабочий лист. Да и вообще можно много чего придумать — вплоть до сохранения и последующего извлечения резервных копий файлов. Все как всегда зависит от задач и ситуации.


И самая большая ложка дегтя к обоим кодам: VBA не позволяет таким образом делать МНОГОКРАТНЫЕ отмены действий(многократное Ctrl+Z), что делает бесполезными попытки запомнить пошагово несколько разных изменений макросами. Отменить можно будет все равно только последнее запомненное действие.


Статья помогла? Поделись ссылкой с друзьями!

  Плейлист   Видеоуроки


Поиск по меткам



Access
apple watch
Multex
Power Query и Power BI
VBA управление кодами
Бесплатные надстройки
Дата и время
Записки
ИП
Надстройки
Печать
Политика Конфиденциальности
Почта
Программы
Работа с приложениями
Разработка приложений
Росстат
Тренинги и вебинары
Финансовые
Форматирование
Функции Excel
акции MulTEx
ссылки
статистика

Содержание:

  1. Удалите все макросы, сохранив файл в формате XLSX
  2. Удалить определенные макросы из диалогового окна «Макрос»
  3. Удалите модуль с макросом

[lyte id=’lyNJbZfM7TU’ /]

Использование макросов VBA в Excel может значительно сэкономить время. Вы можете автоматизировать множество повторяющихся задач и создавать новые функции и возможности в Excel с помощью простых кодов макросов VBA.

Но в некоторых случаях вам может потребоваться удалить все макросы из книги Excel (или удалить только определенные макросы).

Это может быть в том случае, если вы получаете книгу от кого-то другого и хотите освободить ее от макросов, или когда вы отправляете кому-то файл с макросами, а квитанция не нуждается в них в книге.

В этом уроке я покажу вам несколько действительно простых способов удалить макросы из книги в Microsoft Excel.

Итак, приступим!

Удалите все макросы, сохранив файл в формате XLSX

Если вы хотите избавиться от всех макросов сразу, самый простой способ сделать это — сохранить существующую книгу в формате XLSX.

По умолчанию у вас не может быть кода макроса VBA в формате файла XLSX. Если вы это сделаете, он будет автоматически удален при сохранении файла Excel.

В Excel вы можете использовать макросы только в форматах .XLSM, .XLSB и более старых форматах .XLS. Когда вы сохраняете книгу в любом другом формате, макросы сразу теряются.

Предположим, у вас есть файл с именем Example.xlsm (с макросами), ниже приведены шаги по удалению всех макросов из этого файла:

  1. Перейдите на вкладку Файл.
  2. Нажмите на опцию «Сохранить как» (в новых версиях Excel это «Сохранить копию»).
  3. Щелкните Обзор. Откроется диалоговое окно «Сохранить как».
  4. В диалоговом окне «Сохранить как» введите имя файла, с которым вы хотите его сохранить. Вы также можете сохранить существующее имя, если хотите
  5. Щелкните раскрывающийся список Тип файла.
  6. Выберите вариант «Книга Excel (* .xlsx)».
  7. Нажмите на Сохранить
  8. В появившемся запросе нажмите Да. Он просто информирует вас о том, что код VB будет утерян, если вы сохраните этот файл в формате .XLSX.

Вот и все! Теперь ваш файл не содержит макросов.

Этот метод удобен тем, что удаляет все макросы из текущей книги Excel за один раз. Однако, если вы хотите удалить некоторые макросы и удалить некоторые, этот метод не сработает для вас (см. Тот, который использует диалоговое окно «Макрос» для этого).

Еще одна хорошая особенность этого метода заключается в том, что у вас все еще есть копия исходного файла со всеми макросами (на случай, если она вам понадобится в будущем).

Удалить определенные макросы из диалогового окна «Макрос»

Хотя предыдущий метод удалял все макросы. это позволяет вам выбрать те, которые вы хотите удалить.

И если вы хотите удалить все макросы, вы также можете это сделать.

Предположим, у вас есть файл с именем Example.xlsm, в котором есть несколько макросов.

Ниже приведены шаги по удалению макроса из этой книги:

  1. Перейдите на вкладку Разработчик (если вы не видите вкладку Разработчик, обратите внимание на примечание желтого цвета после шагов)
  2. Щелкните по кнопке Macros. Откроется диалоговое окно «Макрос», в котором вы увидите все макросы в книге.
  3. Убедитесь, что в раскрывающемся списке «Макросы в» выбрана «Эта книга».
  4. Выберите имя макроса, который вы хотите удалить, из списка макросов.
  5. Щелкните по кнопке Удалить. Это удалит выбранный макрос

Если вы хотите удалить несколько (или все) макросов, повторите шаги 4 и 5.

Примечание. Если вы не видите вкладку разработчика, нажмите здесь, чтобы узнать, как отобразить вкладку разработчика на ленте в Excel. Кроме того, вы также можете использовать сочетание клавиш — ALT + 8, чтобы открыть диалоговое окно «Макрос».

Кроме того, вы также можете щелкнуть вкладку «Представления», щелкнуть раскрывающийся список «Макросы» и затем выбрать опцию «Просмотр макросов». Это также откроет диалоговое окно Macros.

Хотя этот метод отлично работает, он позволяет удалять только макросы, которые хранятся в модуле редактора Visual Basic. Если у вас есть макросы событий (в определенных листах или ThisWorkbook) или макросы в личной книге макросов, их нельзя удалить с помощью этого метода.

Удалите модуль с макросом

Другой способ удалить макросы — перейти в редактор Visual Basic и удалить оттуда макросы.

Этот метод дает вам наибольший контроль, поскольку вы можете получить доступ ко всем макросам (будь то в модуле, объектах или личной книге макросов).

Ниже приведены шаги по удалению макроса из редактора Visual Basic:

  1. Щелкните вкладку Разработчик на ленте.
  2. Нажмите на опцию Visual Basic (или воспользуйтесь сочетанием клавиш — ALT + F11)
  3. В редакторе VB у вас будут все объекты книги в Project Explorer. Если вы не видите Project Explorer, выберите опцию View в меню, а затем нажмите Project Explorer.
  4. В Project Explorer дважды щелкните объект с кодом макроса. Это может быть модуль, объект рабочего листа или ThisWorkbook.
  5. В открывшемся окне кода удалите макросы, которые хотите удалить. Если вы хотите удалить все, просто выберите все и нажмите клавишу удаления.

Если у вас есть модуль, который имеет код, который вы хотите удалить, вы можете щелкнуть правой кнопкой мыши объект модуля, а затем выбрать опцию «Удалить модуль».

Итак, это три способа удаления макросов из книги Microsoft Excel.

Надеюсь, вы нашли этот урок полезным!

Excel для Microsoft 365 Word для Microsoft 365 Outlook для Microsoft 365 PowerPoint для Microsoft 365 Access для Microsoft 365 Excel 2021 Word 2021 Outlook 2021 PowerPoint 2021 Access 2021 Visio профессиональный 2021 Visio стандартный 2021 Excel 2019 Word 2019 Outlook 2019 PowerPoint 2019 Access 2019 Visio профессиональный 2019 Visio стандартный 2019 Excel 2016 Word 2016 Outlook 2016 PowerPoint 2016 Access 2016 Visio профессиональный 2016 Visio стандартный 2016 Excel 2013 Word 2013 Outlook 2013 PowerPoint 2013 Access 2013 Visio профессиональный 2013 Visio 2013 Excel 2010 Word 2010 Outlook 2010 PowerPoint 2010 Access 2010 Visio премиум 2010 Visio 2010 Visio стандартный 2010 Excel Starter 2010 Еще…Меньше

Макрос — это ряд команд, используемых для автоматизации повторяемой задачи, который может выполняться при выполнении задачи. Макросы позволяют автоматизировать часто используемые задачи, чтобы сэкономить время на нажатии клавиш и действий мыши.

Однако некоторые макросы могут представлять угрозу безопасности. Макросы часто используются злоумышленниками для тихой установки вредоносных программ, таких как вирус, на компьютере или в сети организации.

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

Изменение параметров макросов в центре управления безопасностью

Параметры макросов доступны в центре управления безопасностью. Однако если устройство управляется вашей работой или учебным заведением, системный администратор может запретить кому-либо изменять параметры.

Важно: При изменении параметров макросов в центре управления безопасностью они изменяются только для программы Microsoft 365, которую вы сейчас используете. Параметры макросов не изменяются для всех программ Microsoft 365.

  1. Откройте вкладку Файл.

  2. Нажмите кнопку Параметры.

  3. Затем выберите пункты Центр управления безопасностью и Параметры центра управления безопасностью.

  4. В центре управления безопасностью щелкните элемент Параметры макросов.

    Область "Параметры макроса" центра управления безопасностью

  5. Выберите нужный вариант, а затем нажмите кнопку ОК.

Примечание: Варианты немного отличаются в Excel, мы будем называть их, как мы идем.

  • Отключить все макросы без уведомления.     Этот параметр отключает макросы и связанные с ними оповещения безопасности.

    В Excel этот параметр — Отключить макросы VBA без уведомления и применяется только к макросам VBA.

  • Отключить все макросы с уведомлением.     Этот параметр отключает макросы без отключения оповещений системы безопасности, которые будут появляться при необходимости. Так вы можете включать макросы, когда это требуется.

    В Excel этот параметр — Отключить макросы VBA с уведомлением , и он применяется только к макросам VBA.

  • Отключить все макросы кроме макросов с цифровой подписью     Макросы отключены, а при наличии неподписанных макросов отображаются оповещения системы безопасности. Однако если макрос имеет цифровую подпись доверенного издателя, макрос просто выполняется. Если макрос подписан издателем, которому вы еще не доверяли, вы получите возможность включить подписанный макрос и доверять издателю.

    В Excel этот параметр — Отключить макросы VBA, кроме макросов с цифровой подписью , и он применяется только к макросам VBA.

  • Включить все макросы (не рекомендуется, может выполняться потенциально опасный код)     Все макросы выполняются без подтверждения. Этот параметр делает компьютер уязвимым для вредоносного кода.

    В Excel этот параметр — Включить макросы VBA (не рекомендуется, может выполняться потенциально опасный код) и применяется только к макросам VBA.

  • Excel также установлен флажок Включить макросыExcel 4.0 при включении макросов VBA. Если установить этот флажок, все приведенные выше параметры для макросов VBA также будут применяться к макросам Excel 4.0 (XLM).

    Если этот флажок не установлен, макросы XLM отключены без уведомления.

  • Доверять доступ к объектной модели проектов VBA     Запретить или разрешить программный доступ к объектной модели Visual Basic для приложений (VBA) из клиента автоматизации. Этот параметр безопасности предназначен для кода, написанного для автоматизации программы Microsoft 365 и управления средой VBA и объектной моделью. Это параметр для отдельных пользователей и приложений, который по умолчанию запрещает доступ, препятствуя созданию несанкционированных программ вредоносных самореплицируемых кодов. Чтобы клиенты автоматизации получили доступ к объектной модели VBA, пользователь, выполняя код, должен предоставить доступ. Чтобы включить доступ, выберите поле проверка.

    Примечание: В Microsoft Publisher и Microsoft Access параметр Доверять доступ к объектной модели проектов VBA отсутствует.

Сведения о создании макросов см. в статье Краткое руководство. Создание макроса.

Сведения об использовании макросов на компьютере под управлением Windows S см. в статье Блокировка подозрительных макросов в Office на Windows 10 S.

См. также

Изменение параметров безопасности макросов в Excel

Как вредоносная программа может заразить компьютер

Нужна дополнительная помощь?

Содержание

  • Включение и отключение макросов через меню разработчика
  • Включение и отключение макросов через параметры программы
  • Включение и отключение макросов в других версиях Excel
  • Вопросы и ответы

Макросы в Microsoft Excel

Макросы – это инструмент для создания команд в приложении Microsoft Excel, которые позволяют значительно сократить время на выполнение задач, автоматизировав процесс. Но, в то же время, макросы являются источником уязвимости, которой могут воспользоваться злоумышленники. Поэтому, пользователь на свой страх и риск должен решить применять данную возможность в конкретном случае, или нет. Например, если он не уверен в благонадежности открываемого файла, то лучше макросами не пользоваться, ведь они могут послужить причиной заражения компьютера вредоносным кодом. Учитывая это, разработчики предоставили возможность пользователю самому решать вопрос включения и отключения макросов.

Включение и отключение макросов через меню разработчика

Основное внимание мы уделим процедуре включения и отключения макросов в самой популярной и распространённой на сегодня версии программы — Excel 2010. Потом, более бегло поговорим о том, как это сделать в других версиях приложения.

Включить или отключить макросы в Microsoft Excel можно через меню разработчика. Но, проблема состоит в том, что по умолчанию данное меню отключено. Чтобы его включить, переходим во вкладку «Файл». Далее, кликаем по пункту «Параметры».

Переход в параметры Microsoft Excel

В открывшемся окне параметров, переходим в раздел «Настройка ленты». В правой части окна данного раздела устанавливаем галочку около пункта «Разработчик». Жмем на кнопку «OK».

Включение режима разработчика в Microsoft Excel

После этого, на ленте появляется вкладка «Разработчик».

Переходим во вкладку «Разработчик». В самой правой части ленты расположен блок настроек «Макросы». Чтобы включить или отключить макросы, кликаем по кнопке «Безопасность макросов».

Переход в раздел безопасности макросов в Microsoft Excel

Открывается окно центра управления безопасностью в разделе «Макросы». Для того, чтобы включить макросы, переставляем переключатель в позицию «Включить все макросы». Правда, данное действие разработчик не рекомендует выполнять в целях безопасности. Так что, всё выполняется на свой страх и риск. Жмем на кнопку «OK», которая расположена в нижнем правом углу окна.

Включение макросов в Microsoft Excel

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

  1. Отключить все макросы без уведомления;
  2. Отключить все макросы с уведомлением;
  3. Отключить все макросы, кроме макросов с цифровой подписью.

В последнем случае, макросы, у которых будет иметься цифровая подпись, смогут выполнять задачи. Не забываем жать на кнопку «OK».

Отключение макросов в Microsoft Excel

Lumpics.ru

Включение и отключение макросов через параметры программы

Существует ещё один способ включения и отключения макросов. Прежде всего, переходим в раздел «Файл», и там жмем на кнопку «Параметры», как и в случае включения меню разработчика, о чем мы говорили выше. Но, в открывшемся окне параметров, переходим не в пункт «Настройка ленты», а в пункт «Центр управления безопасностью». Кликаем по кнопке «Параметры центра управления безопасностью».

Переход в параметры центра управлением безопасностью в Microsoft Excel

Открывается то же самое окно Центра управления безопасностью, в которое мы переходили через меню разработчика. Переходим в раздел «Параметры макросов», и там включаем или отключаем макросы тем же способом, как делали это в прошлый раз.

Параметры макросов в Microsoft Excel

В других версиях программы Excel процедура отключения макросов несколько отличается от указанного выше алгоритма.

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

Для того, чтобы включить или отключить макросы в программе Excel 2007, нужно сразу кликнуть по логотипу Microsoft Office в верхнем левом углу окна, а затем в нижней части открывшейся страницы нажать на кнопку «Параметры». Далее, открывается окно Центра управления безопасностью, и дальнейшие действия по включению и отключению макросов практически ничем не отличаются от описанных для Excel 2010.

В версии Excel 2007 достаточно просто последовательно перейти по пунктам меню «Сервис», «Макрос» и «Безопасность». После этого, откроется окно, в котором нужно выбрать один из уровней безопасность работы макросов: «Очень высокая», «Высокая», «Средняя» и «Низкая». Эти параметры соответствуют пунктам параметров макросов более поздних версий.

Как видим, включить макросы в последних версиях программы Excel несколько сложнее, чем это было в предыдущих версиях приложения. Это связано с политикой разработчика на увеличение уровня безопасности пользователя. Таким образом, макросы может включить только более или менее «продвинутый» пользователь, который способен объективно оценить риски от выполняемых действий.

 

Удаление макроса с помощью другово макроса по условию.

 

{quote}{login=Nik_1}{date=06.08.2009 05:59}{thema=Удаление макроса с помощью другово макроса по условию.}{post}Удаление макроса с помощью другово макроса по условию.{/post}{/quote}  

  Слетело сообщение пишу, заново.  

  Есть файл с макросами, нужно написать макрос который бы при наступлении скажем определённой даты удалил бы 1 или всё макросы из файла.  
Как это можно реализовать?

 
 

{quote}{login=The_Prist}{date=06.08.2009 06:03}{thema=}{post}Это констатация факта?  
Опишите подробней, чего хотите. Удаление по какому условию? Какого макроса? Одного?{/post}{/quote}  

  Хочу, что бы при наступлении даты 01.10.2010г из книги был удалён макрос отправляющий данные на печать. Имя макроса «Печать».  
Sub Печать()  
‘  
‘ Печать Макрос  
‘ Макрос записан 04.08.2009 (ekozlova)  
‘  
   Sheets(«Лист1»).Select  
   ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True  
   Sheets(«Форма»).Select  
End Sub

 

The_Prist, огромнейшее спасибо.  
Теперь нас так просто не возьмёшь.:)

 

{quote}{login=KL}{date=06.08.2009 06:08}{thema=}{post}

http://www.cpearson.com/excel/VBE.aspx

{/post}{/quote}  

  KL, выражаю благодарность, очень занимательный сайт.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Первый вирус готов… :-)

 

Надо бы уточнить, что для того, чтобы макросы манипулирующие объектами VBEProject могли работать, необходимо поставить галку в опции «Доверять доступ к объектной модели VBAProject» или как там в русском варианте ;-)

 

XL2003 Меню Сервис-Макрос-Безопасность…, закладка «Надежные издатели», опция «Доверять доступ к Visual Basic Project»  

  XL2007 на русском у меня не установлен, а на английском:  
Круглая кнопка с логотипом Office слева в самом верху, Excel Options, слева закладка «Trust Center», кнопка «Trust Center Settings…», опция «Trust acces to the VBA project object model»

 

KOMETA

Пользователь

Сообщений: 303
Регистрация: 01.01.1970

Столкнулся с тем, что самому понадобилась такая ‘фича’. B связи с этим и пара вопросов.  

  The_Prist, пожалуйста, подскажите, как корректно прописать удаление только определённого макроса(ов), листа(ов)?  

  If ThisWorkbook.VBProject.Protection = 1 Then ‘???’  

  ‘???’  

  И в случае защиты VBA Project, как поставить (известный) пароль и выполнить процедуру?  

  Заранее благодарен.

[*]<a href=»mailto:info@ledrex»;>

 

Borodets

Пользователь

Сообщений: 220
Регистрация: 01.01.1970

полюбому такая штука используеться например для предоставления демоверсии файла, а например через 5 дней макрос уничтожиться, и вуаля файл становиться бесполезен…

Оружие не убивает Человека! Человек убивает Человека!!!

 

KOMETA

Пользователь

Сообщений: 303
Регистрация: 01.01.1970

Добрый день, спасибо за подсказку. Да, Вы правы The_Prist имел в виду процедуру(ы). У меня после генерации отчётов файлы разбухают до нескольких Mb, вот я подумал, что после определённого срока, когда макросы уже не нужны, а информация требуется, лишнее удалять. Mожно через ComboBox-ы на листе ставить дату когда срок будет уже не актуален. Удобно, и для менеджера и для  
агента (работника).  
P.S. снятие пароля дома посмотрю, здесь кроме как на «Планету», доступа нет.

[*]<a href=»mailto:info@ledrex»;>

 

А можно ли еще удалить выпадающие списки в ячеках ?

 

А это какое отношение имеет к затронутой теме? :)  

  Поиск «удалить выпадающий список», сразу первая тема —

http://www.planetaexcel.ru/forum.php?thread_id=14230

 

хотелось бы все сразу удалить и макросы и выпадающие списки по наступлению определенной даты :)

 

А если книга защищена и пароль известен ? можно ли вписать в работу макроса ?

 

т.е. не книга защищена, а VBA модуль. Пароль известен.

 

Sub Delete_All_Code_And_Macro_in_ActiveBook()    
Dim wb As Workbook    
   Dim vbp As VBProject    

     Set wb = ThisWorkbook    
   Set vbp = wb.VBProject    

     If vbp.Protection <> 1 Then Exit Sub    
   Set Application.VBE.ActiveVBProject = vbp    

     SendKeys «password» & «~~»    

           Application.VBE.CommandBars(1).FindControl(ID:=2578, _    
     recursive:=True).Execute  
End If  
Dim oVBComponent As Object  
For Each oVBComponent In ThisWorkbook.VBProject.VBComponents  
On Error Resume Next  
With oVBComponent  
Select Case .Type  
Case 1 ‘Модули  
.Collection.Remove oVBComponent  
Case 2 ‘Модули Класса  
.Collection.Remove oVBComponent  
Case 3 ‘Формы  
.Collection.Remove oVBComponent  
Case 100 ‘ЭтаКнига, Листы  
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines  
End Select  
End With  
Next  
End Sub

 

Не работает вот эта конструкция, подскажите пожалуста, что тут может быть не правильно.  
Public Sub UnprotectVBAProject()    
   Dim wb As Workbook    
   Dim vbp As VBProject    

     Set wb = ThisWorkbook    
   Set vbp = wb.VBProject    

     If vbp.Protection <> 1 Then Exit Sub    
   Set Application.VBE.ActiveVBProject = vbp    

     SendKeys «password» & «~~»    

           Application.VBE.CommandBars(1).FindControl(ID:=2578, _    
     recursive:=True).Execute    
   MsgBox («Защита проекта отключена»)  
End Sub

 

Xxs

Гость

#20

04.04.2011 17:06:28

Огромное спасибо The_Prist. Если бы не Вы, я бы не сделал) Хоть у меня и ушло 3 дня на догадки, но все таки лучше самому делать медленно и учиться чем пользоваться готовым)  

  Sub Auto_Open()  
If Date >= DateValue(«10.08.2008») Then Call DeleteModulesAndCode  
End Sub  

    Sub DeleteModulesAndCode()  

  Dim wb As Workbook  
Dim vbp As Object  

  Set wb = ThisWorkbook  
Set vbp = wb.VBProject  

  If vbp.Protection <> 1 Then Exit Sub  
Set Application.VBE.ActiveVBProject = vbp  

  SendKeys «aku333taf» & «~~»  

  Application.VBE.CommandBars(1).FindControl(ID:=2578, _  
recursive:=True).Execute  

  DoEvents  
Dim oVBComponent As Object  
For Each oVBComponent In ThisWorkbook.VBProject.VBComponents  
On Error Resume Next  
With oVBComponent  
Select Case .Type  
Case 1 ‘Модули  
.Collection.Remove oVBComponent  
Case 2 ‘Модули Класса  
.Collection.Remove oVBComponent  
Case 3 ‘Формы  
.Collection.Remove oVBComponent  
Case 100 ‘ЭтаКнига, Листы  
.CodeModule.DeleteLines 1, .CodeModule.CountOfLines  
End Select  
End With  
Next  
ActiveWorkbook.Save  
End Sub

Понравилась статья? Поделить с друзьями:
  • Макрос в word открываем файл
  • Макрос в excel открыть функцию
  • Макрос в word для антиплагиата
  • Макрос в excel открыть файл word
  • Макрос в word 2007 это