Риск безопасности и блокировка макросов
Microsoft Excel всегда с подозрением относился к файлам с макросами - особенно если они скачаны из какого-нибудь ненадежного источника , например, из интернета. И это вполне оправданно и понятно - макровирусы никто не отменял. Выражалось это в появлении примерно такого сообщения при открытии книги:
Однако с недавних (обновления марта-апреля 2022 года) пор всё стало более сурово:
Поменялся не только цвет предупреждения с жёлтого на красный, но и - что гораздо печальнее - пропала кнопка Включить содержимое (Enable content), позволявшая разблокировать макросы, если они вам всё-таки нужны. Нажатие же на кнопку Дополнительные сведения ничего не разрешает, а лишь приводит вас на сайт со справкой Microsoft по этой теме.
Попытки выключить макросы стандартным образом через вкладку Разработчик - Безопасность макросов (Developer - Macro Security) тоже ни к чему не приводят - блокировка не снимается:
Что же делать, если макросы в скачанном файле вам нужны для работы и необходимо их разблокировать?
Способ 1. Снятие блокировки в свойствах файла
Щёлкаем по файлу правой кнопкой мыши и выбираем команду Свойства (Properties). В открывшемся окне включаем галочку Разблокировать (Unblock):
Жмём на ОК и проблема решена. Но это придется делать с каждым файлом персонально.
Способ 2. Доверенные расположения
Другой способ заключается в добавлении папки, где лежат ваши книги с заблокированными в них макросами в список надёжных расположений, т.е. источников, которым Excel априори доверяет. Тогда не придется разблокировать каждый файл в отдельности.
Для этого идём в Файл - Параметры - Центр управления безопасностью - Параметры центра управления безопасностью - Доверенные расположения (File - Options - Trust Center - Trust Center Settings - Trusted Locations):
Жмём кнопку Добавить новое расположение и указываем папку с файлами. Затем давим на все ОК и перезапускаем Excel, чтобы сделанная настройка вступила в силу.
Вот и всё - и наши макросы опять в строю :)
Ссылки по теме
- Как использовать Личную Книгу Макросов (Personal MacroWorkbook)
- Что такое макросы и как их применять, запускать и копировать
Способ 2. Указанный сетевой путь заперещен параметрами безопасности.
ЗЫ*. MS OFFICE 2019
Обычно использую Excel самый свежий 2024 (360) и 2003 (для предварительной подготовки, -- удобно и быстро), а ещё не надо задумываться где макросы...
с Макросами в MS Office 2024 (360) всё разрешилось сразу: "активные макросы в normal.dotm,
а вот с Excel 2003 (в нём много отработанных макросов) не получается.
Kaspersky Premium разрешает запустить Excel 2003, а когда я в ручную разрешаю запустить макросы, сбрасывает и перегружает Excel, но уже с удалёнными макросами (по-своему чистит файл).
Все рекомендации службы поддержки выполнил, но проблема осталась, где установлен Kaspersky, с защитником Windows таких проблем нет.
P.S. Файлы храню в разрешённой папке (файлы исключений)
может Excel 2003 поместить в доверительные программы-исключения?
- - -
Уважаемый пользователь!
Выполните, пожалуйста, следующую диагностику.
1. Проверьте, пожалуйста, сохраняется ли описанная ситуация, если приостановить защиту продукта. Для этого:
• Щёлкните правой кнопкой мыши по значку программы в правом нижнем углу экрана, рядом с часами;
• В появившемся контекстном меню выберите пункт «Приостановить защиту…»;
• Из трёх опций приостановки защиты выберите просто «Приостановить» и нажмите на кнопку «Приостановить защиту»;
• Нажмите на кнопку «Продолжить» для подтверждения приостановки защиты.
2. Проверьте, пожалуйста, сохраняется ли описанная ситуация при полной выгрузке продукта из памяти. Для этого выйдите из продукта:
• Щёлкните правой кнопкой мыши по значку программы в правом нижнем углу экрана, рядом с часами;
• В появившемся контекстном меню выберите пункт «Выход»;
• Нажмите на кнопку «Продолжить» для подтверждения выгрузки защиты.
3. Если в обоих случаях ошибка/проблема не воспроизводится, попробуйте найти компонент защиты, который может влиять на наличие проблемы/ошибки.
• В левом нижнем углу главного окна программы нажмите на иконку шестерёнки (кнопка «Настройки»).
• В новом окне выберите вкладку «Настройки безопасности».
• Отключите все компоненты защиты, установив переключатель для каждого компонента в состояние «Выключить» (серого цвета).
• Далее последовательно необходимо включать компонент за компонентом. Начните с «Файлового Антивируса».
• Проверьте, воспроизводится ли проблема. Если нет, включаем следующий компонент, не отключая ранее включённый.
• Повторяем это процедуру с остальными компонентами защиты до тех пор, пока включение очередного компонента не приведёт к воспроизведению проблемы.
Информацию об этом компоненте сообщите нам.
Мы будем ждать ваш ответ 7 дней. Если что-то не получается, не работает, или нужно больше времени, обязательно ответьте на это письмо и скажите нам об этом.
С уважением,
Служба технической поддержки
АО «Лаборатория Касперского»
= = =
Касперский на самом деле работает лучше остальных, а главное шустро...
Может Вы, что-то посоветуете.
Разве что перейти полностью на современную версию Excel и отказаться от версии 20-летней давности (на которой и возникает проблема, как я понял).
У меня установлены обе версии Excel 2003 и самая последняя, которой приходится пользоваться
(ну не люблю я эти ленты и панели быстрого доступа), в редких случаях...
Быстрее работает Excel 2003
Кстати, услуги ЖКХ
- где можно скачать актуальные тарифы ЖКХ, хотя-бы для Москвы.
- как просчитать расход воды и электричества, если есть пропуски в снятии показаний приборов =ЕСЛИ(B8<>0;ЕСЛИ(B7;B8-B7;B8-B6);0), -- это если один пропуск, а если 2-3? Хочется написать простую лаконичную формулу, чтобы из сегодняшних показаний вычитались последние снятые данные за квартал или чуть больше, с новыми возможностями Excel 2024 (365)
- Текст макроса курсов валют ЦБРФ, когда нужно больше 3-х валют а ещё последние изменения Ключевой Ставки и других актуальных финансовых показателей правая колонка cbr.ru и rbc.ru/
Option ExplicitНаписал макрос по Вашим примерам:
Sub Get_Currency_CBR()
'*** макрос получения данных курсов валют с CBR для двух валют
' Переменные:
Dim iIndex As Long ' номер строки полученных данных
Dim Sdate As Date ' начальная дата загружаемого периода
Dim Edate As Date ' конечная дата загружаемого периода
Dim CurrencyCode1 As String ' код первой валюты на cbr.ru
Dim CurrencyCode2 As String ' код второй валюты на cbr.ru
Dim CurrencyName1 As String ' название первой валюты (из ячейки D3)
Dim CurrencyName2 As String ' название второй валюты (из ячейки D6)
Dim LastDaylyRow As Long ' номер последней строки в дневных данных
Dim RowDailyCounter As Long ' счетчик строк в дневных данных
Dim AutoCalc As Boolean ' определяет, мень ли автоматический пересчет функций или нет
Dim URL1 As String ' url запроса для первой валюты
Dim URL2 As String ' url запроса для второй валюты
Dim Xmldoc As Object ' MSXML2.DOMDocument
Dim NodeList As Object
Dim XmlNode As Object
Dim NodeAttr As Object
' Отключение автоматического пересчета на листе
If Application.Calculation = xlAutomatic Then
Application.Calculation = xlManual
AutoCalc = True
End If
' Сохраняем параметры запроса из листа Excel
If IsEmpty(Range("E4";)) Then
Sdate = "01.01.1990"
Else
Sdate = Format(Range("E4";), "dd.mm.yyyy";) ' сохраняем начальную дату
End If
If IsEmpty(Range("E5";)) Then
Edate = Date
Else
Edate = Format(Range("E5";), "dd.mm.yyyy";) ' сохраняем конечную дату
End If
' Получаем коды валют и названия валют
CurrencyCode1 = Range("E3";).Value ' код первой валюты
CurrencyName1 = Range("D3";).Value ' название первой валюты
CurrencyCode2 = Range("E6";).Value ' код второй валюты
CurrencyName2 = Range("D6";).Value ' название второй валюты
' Удаляем старые данные
Columns("A:C";).ClearContents ' очистка трех первых колонок (дата, значения первой валюты, значения второй валюты)
' Подписываем заголовки столбцов
ActiveSheet.Cells(1, 1).Value = "Дата"
ActiveSheet.Cells(1, 2).Value = CurrencyName1 ' Название первой валюты
ActiveSheet.Cells(1, 3).Value = CurrencyName2 ' Название второй валюты
' *** получаем дневные данные для первой валюты
Set Xmldoc = CreateObject("Msxml.DOMDocument";)
Xmldoc.async = False
' Формируется строка запроса к сайту для первой валюты
URL1 = "http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=" + Trim(Sdate) + "&date_req2=" + Trim(Edate) + "&VAL_NM_RQ=" + Trim(CurrencyCode1)
' Далее обрабатывается xml
If Not Xmldoc.Load(URL1) = True Then
MsgBox ("Ошибка загрузки данных для " & CurrencyCode1 & " из cbr.ru";)
Application.Quit
Exit Sub
End If
Set NodeList = Xmldoc.SelectNodes("*/Record";)
' Заполнение данных первой валюты
For iIndex = 0 To NodeList.Length - 1
Set XmlNode = NodeList.Item(iIndex).CloneNode(True)
Set NodeAttr = XmlNode.Attributes(0)
ActiveSheet.Cells(NodeList.Length - iIndex + 1, 1).Value = CDate(NodeAttr.Value) ' формируем даты
ActiveSheet.Cells(NodeList.Length - iIndex + 1, 2).Value = CDbl(XmlNode.ChildNodes(1).Text) ' формируем данные
Next
' *** получаем дневные данные для второй валюты
Set Xmldoc = CreateObject("Msxml.DOMDocument";)
Xmldoc.async = False
' Формируется строка запроса к сайту для второй валюты
URL2 = "http://www.cbr.ru/scripts/XML_dynamic.asp?date_req1=" + Trim(Sdate) + "&date_req2=" + Trim(Edate) + "&VAL_NM_RQ=" + Trim(CurrencyCode2)
' Далее обрабатывается xml для второй валюты
If Not Xmldoc.Load(URL2) = True Then
MsgBox ("Ошибка загрузки данных для " & CurrencyCode2 & " из cbr.ru";)
Application.Quit
Exit Sub
End If
Set NodeList = Xmldoc.SelectNodes("*/Record";)
' Заполнение данных второй валюты
For iIndex = 0 To NodeList.Length - 1
Set XmlNode = NodeList.Item(iIndex).CloneNode(True)
Set NodeAttr = XmlNode.Attributes(0)
ActiveSheet.Cells(NodeList.Length - iIndex + 1, 3).Value = CDbl(XmlNode.ChildNodes(1).Text) ' формируем данные для второй валюты
Next
' Включаем автопересчет формул
Application.Calculation = xlAutomatic
End Sub