Gestiona códigos VBA de libros de Excel habilitados para macros con C++
Agregar un módulo VBA en C++
El siguiente código de ejemplo crea un nuevo libro de trabajo y agrega un nuevo módulo VBA y código de macro y guarda la salida en formato XLSM. Una vez que abres el archivo XLSM de salida en Microsoft Excel y haces clic en los comandos de menú Desarrollador > Visual Basic, verás un módulo llamado “TestModule” y dentro, verás el siguiente código de macro.
Sub ShowMessage()
MsgBox "Welcome to Aspose!"
End SubAquí tienes el código de ejemplo para generar el archivo de salida XLSM con módulo de VBA y código de macro.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
// Source directory path
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
// Output directory path
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
// Create new workbook
Workbook workbook;
// Access first worksheet
Worksheet worksheet = workbook.GetWorksheets().Get(0);
// Add VBA Module
int32_t idx = workbook.GetVbaProject().GetModules().Add(worksheet);
// Access the VBA Module, set its name and codes
VbaModule module = workbook.GetVbaProject().GetModules().Get(idx);
module.SetName(u"TestModule");
U16String codes = u"Sub ShowMessage()\r\n"
u" MsgBox \"Welcome to Aspose!\"\r\n"
u"End Sub";
module.SetCodes(codes);
// Save the workbook
U16String outputPath = outDir + u"output_out.xlsm";
workbook.Save(outputPath, SaveFormat::Xlsm);
std::cout << "VBA module added and workbook saved successfully!" << std::endl;
Aspose::Cells::Cleanup();
return 0;
}
Modificar VBA o macro en C++
Puedes modificar el código de VBA o macro utilizando Aspose.Cells. Aspose.Cells ha añadido el siguiente espacio de nombres y clases para leer y modificar el proyecto de VBA en el archivo de Excel.
- Aspose::Cells::Vba
- VbaProject
- VbaModuleCollection
- VbaModule
Este artículo te mostrará cómo cambiar el código de VBA o macro dentro del archivo de Excel fuente utilizando Aspose.Cells.
El siguiente código de ejemplo carga el archivo Excel fuente que contiene el siguiente código VBA o macro dentro de él:
Sub Button1_Click()
MsgBox "This is test message."
End SubDespués de la ejecución del código de ejemplo de Aspose.Cells, el código VBA o macro será modificado de esta manera:
Sub Button1_Click()
MsgBox "This is Aspose.Cells message."
End SubPuedes descargar el archivo de Excel fuente y el archivo de Excel de salida desde los enlaces proporcionados.
#include <iostream>
#include "Aspose.Cells.h"
using namespace Aspose::Cells;
int main()
{
Aspose::Cells::Startup();
U16String srcDir(u"..\\Data\\01_SourceDirectory\\");
U16String outDir(u"..\\Data\\02_OutputDirectory\\");
U16String inputFilePath = srcDir + u"sample.xlsm";
U16String outputFilePath = outDir + u"output_out.xlsm";
Workbook workbook(inputFilePath);
VbaProject vbaProject = workbook.GetVbaProject();
VbaModuleCollection modules = vbaProject.GetModules();
for (int i = 0; i < modules.GetCount(); ++i)
{
VbaModule module = modules.Get(i);
U16String code = module.GetCodes();
U16String searchStr = u"This is test message.";
U16String replaceStr = u"This is Aspose.Cells message.";
if (code.IndexOf(searchStr) != -1)
{
U16String newCode;
const char16_t* codeData = code.GetData();
const char16_t* searchData = searchStr.GetData();
int codeLen = code.GetLength();
int searchLen = searchStr.GetLength();
int pos = 0;
int searchPos;
while ((searchPos = code.IndexOf(searchStr)) != -1)
{
for (int j = pos; j < searchPos; j++)
{
newCode += codeData[j];
}
newCode += replaceStr;
pos = searchPos + searchLen;
}
for (int j = pos; j < codeLen; j++)
{
newCode += codeData[j];
}
module.SetCodes(newCode);
}
}
workbook.Save(outputFilePath);
std::cout << "VBA module codes updated successfully." << std::endl;
Aspose::Cells::Cleanup();
return 0;
}
Temas Avanzados
- Agregar una referencia de biblioteca al proyecto VBA en el libro de trabajo
- Asignar Macro a un control de formulario
- Comprobar si la firma digital del código VBA es válida
- Comprobar si el código VBA está firmado
- Verifica si el proyecto VBA en un libro de trabajo está firmado
- Comprobar si el proyecto de VBA está protegido y bloqueado para ver
- Copiar el diseñador de almacenamiento de formularios de usuario Macro de VBA de la plantilla al libro de Excel de destino
- Firmar digitalmente un proyecto de código VBA con certificado
- Exportar certificado de VBA a archivo o flujo de datos
- Filtrar el proyecto VBA al cargar un libro de trabajo
- Descubrir si el proyecto de VBA está protegido
- Proteger con contraseña el proyecto de VBA del libro de Excel