Práce s makry VBA
Visual Basic pro aplikace (VBA) pro Microsoft Word je jednoduchý, ale výkonný programovací jazyk, který lze použít k rozšíření funkčnosti. Aspose.Words API poskytuje tři třídy pro získání přístupu ke zdrojovému kódu projektu VBA:
- Třída VBAProject poskytuje přístup k informacím o projektu VBA
- Třída VBAModulesCollection vrací kolekci modulů projektu VBA
- Třída VbaModule poskytuje přístup k modulu projektu VBA
Vytvoření VBA projektu
Aspose.Words API poskytuje vlastnost Document.VbaProject pro získání nebo nastavení VbaProject v dokumentu.
Následující příklad kódu ukazuje, jak vytvořit projekt VBA a modul VBA spolu se základními vlastnostmi, např.:
| 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"); |
Číst Makra
Aspose.Words také poskytuje uživatelům možnost číst VBA makra.
Následující příklad kódu ukazuje, jak číst VBA makra z dokumentu:
| 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; | |
| } | |
| } |
Psát nebo upravovat makra
Pomocí Aspose.Words mohou uživatelé upravovat VBA makra.
Následující příklad kódu ukazuje, jak upravit makra VBA pomocí vlastnosti SourceCode:
| 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); |
Klon VBA Projekt
Pomocí Aspose.Words je také možné klonovat projekty VBA.
Následující příklad kódu ukazuje, jak klonovat Projekt VBA pomocí vlastnosti Clone, která vytvoří kopii existujícího projektu:
| 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"); |
Klon VBA Modul
V případě potřeby můžete také klonovat moduly VBA.
Následující příklad kódu ukazuje, jak klonovat modul VBA pomocí vlastnosti Clone, která vytvoří kopii existujícího projektu:
| 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"); |