¿Es posible extraer todo el código de VBA de un documento "docm" de Word 2007 con la API?Código de macro (VBA) mediante programación desde documentos de Word 2007
He encontrado cómo insertar código VBA en tiempo de ejecución y cómo eliminar todo el código VBA, pero no extraer el código real en una secuencia o cadena que puedo almacenar (e insertar en otros documentos en el futuro).
Cualquier consejo o recurso sería apreciado.
Editar: gracias a todos, la respuesta de Aardvark fue exactamente lo que estaba buscando. He convertido su código para C#, y fue capaz de llamarlo desde una biblioteca de clases utilizando Visual Studio 2008.
using Microsoft.Office.Interop.Word;
using Microsoft.Vbe.Interop;
...
public List<string> GetMacrosFromDoc()
{
Document doc = GetWordDoc(@"C:\Temp\test.docm");
List<string> macros = new List<string>();
VBProject prj;
CodeModule code;
string composedFile;
prj = doc.VBProject;
foreach (VBComponent comp in prj.VBComponents)
{
code = comp.CodeModule;
// Put the name of the code module at the top
composedFile = comp.Name + Environment.NewLine;
// Loop through the (1-indexed) lines
for (int i = 0; i < code.CountOfLines; i++)
{
composedFile += code.get_Lines(i + 1, 1) + Environment.NewLine;
}
// Add the macro to the list
macros.Add(composedFile);
}
CloseDoc(doc);
return macros;
}
Utilice la StringBuilder para optimizar el uso de memoria: StringBuilder sb = new StringBuilder(); para .... sb.AppendLine ("su línea de código"); ... macros.Add (sb.ToString()); – Skuami