Hantera VBA koder för Excel makroaktiverat arbetsbok med C++
Lägg till en VBA-modul i C++
Följande exempel skapar en ny arbetsbok och lägger till en ny VBA-modul och makrokod och sparar resultatet i XLSM-format. När du öppnar den exporterade XLSM-filen i Microsoft Excel och klickar på kommando menyn Utvecklarverktyg > Visual Basic, kommer du att se en modul som heter “TestModule” och inuti den ser du följande makrokod.
Sub ShowMessage()
MsgBox "Welcome to Aspose!"
End Sub
Här är provkoden för att generera utdata i XLSM-format med VBA-modul och makrokod.
#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;
}
Ändra VBA eller makro i C++
Du kan modifiera VBA eller makrokod med hjälp av Aspose.Cells. Aspose.Cells har lagt till följande namespace och klasser för att läsa och modifiera VBA-projektet i Excel-filen.
- Aspose::Cells::Vba
- VbaProject
- VbaModuleCollection
- VbaModule
Den här artikeln visar hur du ändrar VBA eller makrokoden inne i käll-Excel-filen med hjälp av Aspose.Cells.
Följande exempel laddar in källexcelfilen som innehåller följande VBA- eller makrokod:
Sub Button1_Click()
MsgBox "This is test message."
End Sub
Efter körning av Aspose.Cells exempel kod, kommer VBA- eller makrokoden att ändras så här:
Sub Button1_Click()
MsgBox "This is Aspose.Cells message."
End Sub
Du kan ladda ner den källa Excel-filen och den utdata Excel-filen från de angivna länkarna.
#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;
}
Avancerade ämnen
- Lägg till ett bibliotek i VBA-projekt i arbetsboken
- Tilldela makro till formulärkontroll
- Kontrollera om den digitala signaturen av VBA-koden är giltig
- Kontrollera om VBA-koden är signerad
- Kontrollera om VBA-projektet i en arbetsbok är signerat
- Kontrollera om VBA-projektet är skyddat och låst för visning
- Kopiera VBA-makro UserForm DesignerStorage från mallen till mål arbetsboken
- Signera digitalt ett VBA-kodprojekt med certifikat
- Exportera VBA-certifikat till fil eller ström
- Filtrera VBA-projekt vid inläsning av en arbetsbok
- Ta reda på om VBA-projektet är skyddat
- Lösenordsskydda VBA-projektet för Excel-arbetsbok