¿Cómo inspeccionar / ver una macro de Excel antes de "habilitar macros" para una hoja?

13

De vez en cuando recibo un archivo xls que contiene una macro que debo usar. Si no tengo plena confianza en el remitente, deseo mirar la fuente de la macro para verificar que realmente solo hace lo que se supone que debe hacer.

Sin embargo, en Excel 2010, el botón "editar" debajo de "ver macros" está deshabilitado a menos que primero habilite las macros para la hoja, pero si primero habilito las macros, puedo, a lo sumo, averiguar sobre códigos maliciosos solo después de que ese código haya terminado corriendo...

¿Cómo puedo ver el origen de la macro antes de habilitar macros para el documento?

GJ
fuente

Respuestas:

13

Puede echar un vistazo a todas las macros en un documento utilizando la pestaña Desarrollador en Word para brindarle un acceso fácil a las rutinas de Visual Basic incrustadas en el documento.

Primero debe asegurarse de que la pestaña Desarrollador esté habilitada. Vaya a Archivo -> Opciones y luego:

pestaña desarrollador

En la pestaña Desarrollador que debería aparecer ahora debería haber un botón "Visual Basic" en el que puede hacer clic para acceder al editor de Visual Basic.

Al navegar por el árbol de documentos a la izquierda del editor, debería poder ver todo el código y los módulos que están incrustados en el documento sin tener que habilitar primero las macros.

Tiendo a hacer esto con documentos en los que no confío.

Nota: He hecho esto en Word, la misma función está disponible en Excel y la opción para habilitarla está en el mismo lugar.

Mokubai
fuente
9

En todas las versiones de todas las aplicaciones de Office desde 2003, y posiblemente antes, Alt+ F11abrirá el Editor VBA. No es necesario habilitar la pestaña 'Desarrollador' en la cinta de opciones para Office 2007 y más reciente para que esto funcione.

hBy2Py
fuente
2
Vale la pena señalar que en muchas versiones (Excel al menos), Alt+ F11puede hacer que el " ! SECURITY WARNING ... Enable Content" banner desaparezca, lo que implica que la ejecución del código ahora está habilitada. Esto es engañoso. Puede hacer una demostración de esto creando un documento con un on_open()módulo. Podrá hacer Alt+ F11in e inspeccionar el código sin disparar el evento.
Peter Vandivier
0

Si bien las respuestas de Mokubai y hBy2Py parecen excelentes y, de hecho, le permiten mostrar el Editor de VBA, parece que al menos en Excel de Microsoft Office Professional Plus 2016 aún no le permite ver el código.

Es cierto que tengo esa versión, y estaba seguro de que recibí un XLS malicioso y quería inspeccionarlo. Después de abrirlo en Excel, se abrió en modo seguro como de costumbre y, por supuesto, no tenía intención de descartar ese modo. Cuando abrí el Editor VBA como indicaron otros encuestados, me presentaron ... Editor VBA vacío . El panel "Explorador de proyectos" muestra útilmente "No hay proyectos abiertos" a pesar de que todavía no he cerrado el archivo XLS. Solo por probar, abrí el segundo documento (uno de mis trabajos) e inmediatamente apareció en VBA Editor y estaba (correctamente) totalmente desprovisto de cualquier VBA. Sin embargo, el documento de Internet no figuraba en el Editor de VBA .

Perdí algo de tiempo tratando de entender por qué es así, y no encontré ninguna razón. Parece que mi edición de Excel simplemente no envía módulos VBA al Editor VBA cuando el documento se carga en modo seguro. Lamentablemente, el Editor de VBA carece de alguna función de "VBA abierto desde Office Document", por lo que está claro que Excel es el cerebro aquí y tiene que descomprimir / decodificar / lo que sea el XLS primero.

La solución resultó ser bastante simple.

  1. Haga clic en Ribbon-> Developer->MacroSecurity
  2. alternativamente, File-> Options-> SecurityCenter(último grupo de opciones) -> Settings-> Macros)
  3. Recuerde (o escriba) cuáles son las configuraciones actuales
  4. Cámbielos a "Bloquear todas las macros sin notificación"
  5. Confirme, cierre, vuelva a abrir el documento, vuelva a abrir VBA Editor
  6. Restaura la configuración original mientras terminas de jugar con fuego

Efectos:

  • la notificación no apareció
  • documento ha sido cargado completamente
  • no se ejecutaron macros
  • VBA Editor obtuvo los módulos y presentó todo el código

En caso de que tenga curiosidad: sí, de hecho fue malicioso, pequeño ejemplo:

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

Por cierto. como puede ver, inmediatamente comenté el punto de entrada y volví a guardar el documento, en caso de que permita que las macros se ejecuten en algún momento posterior.

quetzalcoatl
fuente