Jak sprawdzić / wyświetlić makro Excel przed „włączeniem makr” dla arkusza?

13

Od czasu do czasu otrzymuję plik xls zawierający makro, którego powinienem użyć. Jeśli nie mam pełnego zaufania do nadawcy, chcę spojrzeć na źródło makra, aby sprawdzić, czy rzeczywiście robi to, co powinien.

Jednak w programie Excel 2010 przycisk „edytuj” w obszarze „wyświetl makra” jest wyłączony, chyba że najpierw włączę makra dla arkusza - ale jeśli najpierw włączę makra, mogę co najwyżej dowiedzieć się o złośliwym kodzie dopiero po zakończeniu tego kodu bieganie...

Jak mogę wyświetlić źródło makra przed włączeniem makr dla dokumentu?

GJ
źródło

Odpowiedzi:

13

Możesz przejrzeć wszystkie makra w dokumencie, korzystając z karty Deweloper w programie Word, aby zapewnić łatwy dostęp do procedur Visual Basic osadzonych w dokumencie.

Najpierw upewnij się, że karta Deweloper jest włączona. Przejdź do Plik -> Opcje, a następnie:

karta programisty

Na karcie Deweloper, która powinna się teraz pojawić, powinien być teraz przycisk „Visual Basic”, który można kliknąć, aby przejść do edytora Visual Basic.

Przeglądając drzewo dokumentów po lewej stronie edytora, powinieneś zobaczyć wszystkie kody i moduły osadzone w dokumencie bez konieczności włączania makr.

Zazwyczaj robię to z dokumentami, którym nie ufam.

Uwaga: Zrobiłem to w programie Word, ta sama funkcja jest dostępna w programie Excel, a opcja włączenia jest w tym samym miejscu.

Mokubai
źródło
9

We wszystkich wersjach wszystkich aplikacji pakietu Office od 2003 r. I być może wcześniej, Alt+ F11otworzy edytor VBA. Aby działało, nie trzeba włączać karty „Deweloper” na Wstążce dla pakietu Office 2007 i nowszych.

hBy2Py
źródło
2
Warto zauważyć, że w wielu wersjach (przynajmniej Excel) Alt+ F11może spowodować ! SECURITY WARNING ... Enable Contentzniknięcie banera „ ”, co oznacza, że wykonanie kodu jest teraz włączone. To jest mylące. Możesz to zrobić, tworząc dokument z on_open()modułem. Będziesz mógł Alt+ wejść F11i sprawdzić kod bez odpalenia zdarzenia.
Peter Vandivier
0

Podczas gdy odpowiedzi Mokubai i hBy2Py wydają się świetne i rzeczywiście pozwalają pokazać edytor VBA, wydaje się, że przynajmniej w Excelu z Microsoft Office Professional Plus 2016 nadal nie pozwala ci zobaczyć kodu.

Zdarzyło mi się mieć tę wersję i byłem pewien, że otrzymałem złośliwy XLS i chciałem go sprawdzić. Po otwarciu w programie Excel otworzył się jak zwykle w trybie awaryjnym i oczywiście nie miałem zamiaru go wyłączać. Kiedy otworzyłem Edytor VBA, jak wskazali inni respondenci, pokazano mi ... pusty Edytor VBA . Panel „Project explorer” wyświetlał pomocniczo komunikat „Brak otwartych projektów”, mimo że nie zamknąłem jeszcze pliku XLS. Dla celów testowych otworzyłem drugi dokument (jeden z moich prac), który natychmiast pojawił się w VBA Editor i był (właściwie) całkowicie pozbawiony VBA. Jednak dokument z Internetu nie był wymieniony w edytorze VBA .

Zmarnowałem trochę czasu, próbując dowiedzieć się, dlaczego tak jest, i nie znalazłem żadnego powodu. Wygląda na to, że moja wersja programu Excel po prostu nie wysyła modułów VBA do edytora VBA, gdy dokument jest ładowany w trybie awaryjnym. Niestety edytorowi VBA brakuje funkcji „otwórz VBA z dokumentu Office”, więc jasne jest, że Excel jest tutaj mózgiem i musi najpierw rozpakować / zdekodować / cokolwiek XLS.

Rozwiązanie okazało się dość proste.

  1. Kliknij Ribbon-> Developer->MacroSecurity
  2. alternatywnie File-> Options-> SecurityCenter(ostatnia grupa opcji) -> Settings-> Macros)
  3. Pamiętaj (lub zanotuj), jakie są bieżące ustawienia
  4. Zmień je na „Blokuj wszystkie makra bez powiadomienia”
  5. Potwierdź, zamknij, ponownie otwórz dokument, ponownie otwórz VBA Editor
  6. Przywróć oryginalne ustawienia po zakończeniu gry z ogniem

Efekty:

  • powiadomienie nie pojawiło się
  • dokument został w pełni załadowany
  • nie wykonano żadnych makr
  • VBA Editor dostał moduły i przedstawił cały kod

Jeśli jesteś ciekawy: tak, to rzeczywiście był złośliwy, mały przykład:

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

BTW. jak widać, natychmiast skomentowałem punkt wejścia i ponownie zapisałem dokument, na wypadek, gdy pozwolę makrom uruchomić się w pewnym momencie później.

quetzalcoatl
źródło