Arbeiten mit VBA Makros

Visual Basic für Anwendungen (VBA) für Microsoft Word ist eine einfache, aber leistungsstarke Programmiersprache, mit der die Funktionalität erweitert werden kann. Aspose.Words API bietet drei Klassen, um Zugriff auf den Quellcode des VBA -Projekts zu erhalten:

  • Die VBAProject-Klasse bietet Zugriff auf VBA-Projektinformationen
  • Die VBAModulesCollection -Klasse gibt die Sammlung von VBA -Projektmodulen zurück
  • Die VbaModule -Klasse bietet Zugriff auf das VBA-Projektmodul

Erstellen Sie ein VBA-Projekt

Aspose.Words API stellt die Document.VbaProject -Eigenschaft bereit, um VbaProject im Dokument abzurufen oder festzulegen.

Das folgende Codebeispiel zeigt, wie Sie ein VBA -Projekt und ein VBA -Modul zusammen mit grundlegenden Eigenschaften, z. B. Name und Typ, erstellen:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>();
// Create a new VBA project.
System::SharedPtr<VbaProject> project = System::MakeObject<VbaProject>();
project->set_Name(u"AsposeProject");
doc->set_VbaProject(project);
// Create a new module and specify a macro source code.
System::SharedPtr<VbaModule> vbModule = System::MakeObject<VbaModule>();
vbModule->set_Name(u"AsposeModule");
vbModule->set_Type(VbaModuleType::ProceduralModule);
vbModule->set_SourceCode(u"New source code");
// Add module to the VBA project.
doc->get_VbaProject()->get_Modules()->Add(vbModule);
doc->Save(outputDataDir + u"WorkingWithVbaMacros.CreateVbaMacros.docm");

Makros lesen

Aspose.Words bietet Benutzern auch die Möglichkeit, VBA Makros zu lesen.

Das folgende Codebeispiel zeigt, wie VBA Makros aus dem Dokument gelesen werden:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"VbaProject.docm");
if (doc->get_VbaProject() != nullptr)
{
for (System::SharedPtr<VbaModule> module : System::IterateOver(doc->get_VbaProject()->get_Modules()))
{
std::cout << module->get_SourceCode().ToUtf8String() << std::endl;
}
}

Makros schreiben oder ändern

Mit Aspose.Words können Benutzer VBA Makros ändern.

Das folgende Codebeispiel zeigt, wie VBA Makros mit der Eigenschaft SourceCode geändert werden:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"VbaProject.docm");
System::SharedPtr<VbaProject> project = doc->get_VbaProject();
System::String newSourceCode = u"Test change source code";
// Choose a module, and set a new source code.
project->get_Modules()->idx_get(0)->set_SourceCode(newSourceCode);

VBA-Projekt klonen

Mit Aspose.Words ist es auch möglich, VBA Projekte zu klonen.

Das folgende Codebeispiel zeigt, wie Sie das VBA -Projekt mithilfe der Clone -Eigenschaft klonen, die eine Kopie des vorhandenen Projekts erstellt:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"VbaProject.docm");
System::SharedPtr<VbaProject> project = doc->get_VbaProject();
System::SharedPtr<Document> destDoc = System::MakeObject<Document>();
// Clone the whole project.
destDoc->set_VbaProject(doc->get_VbaProject()->Clone());
destDoc->Save(outputDataDir + u"WorkingWithVbaMacros.CloneVbaProject.docm");

VBA-Modul klonen

Sie können bei Bedarf auch VBA -Module klonen.

Das folgende Codebeispiel zeigt, wie Sie das Modul VBA mithilfe der Eigenschaft Clone klonen, mit der eine Kopie des vorhandenen Projekts erstellt wird:

For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-C
System::SharedPtr<Document> doc = System::MakeObject<Document>(inputDataDir + u"VbaProject.docm");
System::SharedPtr<VbaProject> project = doc->get_VbaProject();
System::SharedPtr<Document> destDoc = System::MakeObject<Document>();
destDoc->set_VbaProject(System::MakeObject<VbaProject>());
// Clone a single module.
System::SharedPtr<VbaModule> copyModule = doc->get_VbaProject()->get_Modules()->idx_get(u"AsposeModule")->Clone();
destDoc->get_VbaProject()->get_Modules()->Add(copyModule);
destDoc->Save(outputDataDir + u"WorkingWithVbaMacros.CloneVbaModule.docm");