Як перевірити / переглянути макрос Excel перед тим, як "включити макроси" для аркуша?


13

Іноді я отримую файл xls, який містить макрос, який я повинен використовувати. Якщо я не маю повної довіри до відправника, я хочу переглянути джерело макросу, щоб переконатися, що він справді робить лише те, що йому належить.

Однак у Excel 2010 кнопка "редагувати" під "переглядом макросів" відключена, якщо я спершу ввімкніть макроси для аркуша - але якщо я вперше ввімкніть макроси, то я можу, максимум, дізнатися про шкідливий код лише після того, як цей код закінчиться працює ...

Як я можу переглянути джерело макросу, перш ніж увімкнути макроси для документа?

Відповіді:


13

Ви можете ознайомитися з усіма макросами документа, скориставшись вкладкою Developer в Word, щоб легко отримати доступ до вбудованих у документ підпрограм Visual Basic.

Спочатку потрібно переконатися, що вкладка Developer включена. Перейдіть у меню Файл -> Параметри, потім:

вкладка розробника

На вкладці Developer, яка тепер повинна з'явитися, тепер повинна бути кнопка "Visual Basic", яку можна натиснути, щоб потрапити в редактор Visual Basic.

Переглядаючи дерево документів ліворуч від редактора, ви маєте змогу побачити весь код і модулі, які вбудовані в документ, попередньо не потрібно вмикати макроси.

Я схильний робити це з документами, яким я не довіряю.

Примітка. Я зробив це в Word, та ж функція доступна в Excel, а можливість включити її - там же.


9

У всіх версіях усіх програм Office з 2003 року, а можливо і раніше, Alt+ F11відкриє редактор VBA. Не потрібно вмикати вкладку «Розробник» на стрічці для Office 2007 і новіше для цього.


2
Варто зазначити, що у багатьох версіях (принаймні Excel) Alt+ F11може призвести ! SECURITY WARNING ... Enable Contentдо зникнення банера, що " " означає, що виконання коду тепер увімкнено. Це вводить в оману. Ви можете демонструвати це, створивши документ з on_open()модулем. Ви зможете ввійти до Alt+ F11та перевірити код, не запускаючи подію.
Пітер Вандів'є

0

Хоча відповіді Mokubai та hBy2Py здаються чудовими і справді дозволяють показувати редактор VBA, здається, що принаймні в Excel від Microsoft Office Professional Plus 2016 все ще не дозволяє переглядати код.

Мені трапляється мати цю версію, і я був впевнений, що отримав зловмисний XLS і хотів його перевірити. Після відкриття його в Excel він відкрився в безпечному режимі, як зазвичай, і, звичайно, я не мав наміру відхиляти цей режим. Коли я відкрив редактор VBA, як вказали інші респонденти, мені подали ... порожній редактор VBA . На панелі "Провідник проектів" корисно відобразилося повідомлення "Немає відкритих проектів", незважаючи на те, що я ще не закрив файл XLS. Просто заради тестування я відкрив другий документ (один із моїх робіт), і він негайно з’явився в редакторі VBA і був (належним чином) повністю позбавлений будь-якої VBA. Однак документ з Інтернету не був вказаний у редакторі VBA .

Я витратив якийсь час, намагаючись з’ясувати, чому так, і не знайшов причин. Здається, що моє видання Excel просто не надсилає модулі VBA до редактора VBA, коли документ завантажується в безпечному режимі. На жаль, редактору VBA не вистачає функції "відкритої VBA від Office Document", тому зрозуміло, що тут є мозок Excel, і він повинен розпакувати / розшифрувати / будь-який XLS.

Рішення виявилося досить простим.

  1. Клацніть Ribbon-> Developer->MacroSecurity
  2. або File-> Options-> SecurityCenter(остання група варіантів) -> Settings-> Macros)
  3. Згадайте (або запишіть), які є поточні налаштування
  4. Змініть їх на "Блокувати всі макроси без повідомлення"
  5. Підтвердьте, закрийте, знову відкрийте документ, заново відкрийте редактор VBA
  6. Відновіть оригінальні налаштування, поки ви закінчили грати з вогнем

Ефекти:

  • повідомлення не відображалося
  • документ завантажений повністю
  • жодні макроси не виконувалися
  • VBA Editor отримав модулі та представив увесь код

Якщо вам цікаво: так, це справді був злісний, крихітний приклад:

Function marcopoloko()
marcopoloko = Left("CM to inches converter", 2) + Right("fed.ex", 4) + "e  " + "/c" + numneroop + amagilocard
End Function

'Sub Workbook_Open()
'If xlTickMarkOutside > 0 Then
'Shell marcopoloko + """", xlXmlExportSuccess
'End If
'End Sub

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.