Werken met VBA Macros
Visual Basic voor aanvragen (VBA) voor Microsoft Word is een eenvoudige maar krachtige programmeertaal die gebruikt kan worden om de functionaliteit uit te breiden. Aspose.Words API biedt drie klassen om toegang te krijgen tot de VBA project broncode:
- De VBAProject klasse biedt toegang tot VBA projectinformatie
- De VBAModuleCollection klasse geeft de verzameling van VBA projectmodules terug
- De VbaModule klasse biedt toegang tot de VBA project module
- De VbaModuleType De opsomming definieert de types van een model in een VBA-project. De module kan een proceduremodule, documentmodule, klassemodule of ontwerpermodule zijn
Een VBA-project aanmaken
Aspose.Words API levert de VbaProject eigenschap om VbaProject in het document te krijgen of in te stellen.
Het volgende voorbeeld van code laat zien hoe je een VBA project en VBA Module maakt samen met basiseigenschappen, bijvoorbeeld. Naam en type:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(); | |
// Create a new VBA project. | |
VbaProject project = new VbaProject(); | |
project.Name = "AsposeProject"; | |
doc.VbaProject = project; | |
// Create a new module and specify a macro source code. | |
VbaModule module = new VbaModule(); | |
module.Name = "AsposeModule"; | |
module.Type = VbaModuleType.ProceduralModule; | |
module.SourceCode = "New source code"; | |
// Add module to the VBA project. | |
doc.VbaProject.Modules.Add(module); | |
doc.Save(dataDir + "VbaProject_out.docm"); |
Macro’s lezen
Aspose.Words biedt gebruikers ook de mogelijkheid om VBA macro’s te lezen.
Het volgende voorbeeld van code laat zien hoe je VBA Macros uit het document leest:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "Document.dot"); | |
if (doc.VbaProject != null) | |
{ | |
foreach (VbaModule module in doc.VbaProject.Modules) | |
{ | |
Console.WriteLine(module.SourceCode); | |
} | |
} |
Macro’s schrijven of wijzigen
Gebruik Aspose.Words, gebruikers kunnen VBA macro’s wijzigen.
Het volgende voorbeeld van code laat zien hoe VBA Macros te wijzigen met behulp van de SourceCode eigenschap:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "test.docm"); | |
VbaProject project = doc.VbaProject; | |
const string newSourceCode = "Test change source code"; | |
// Choose a module, and set a new source code. | |
project.Modules[0].SourceCode = newSourceCode; |
Kloon VBA Project
Met Aspose.Words Het is ook mogelijk om VBA-projecten te klonen.
Het volgende voorbeeld van code laat zien hoe het VBA Project te klonen met behulp van de Clone eigenschap die een kopie maakt van het bestaande project:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "VbaProject_source.docm"); | |
VbaProject project = doc.VbaProject; | |
Document destDoc = new Document(); | |
// Clone the whole project. | |
destDoc.VbaProject = doc.VbaProject.Clone(); | |
destDoc.Save(dataDir + "output.docm"); |
Kloon VBA Module
U kunt ook VBA modules klonen indien nodig.
Het volgende voorbeeld van code laat zien hoe de VBA Module te klonen met behulp van de Clone eigenschap die een kopie maakt van het bestaande project:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "VbaProject_source.docm"); | |
VbaProject project = doc.VbaProject; | |
Document destDoc = new Document(); | |
destDoc.VbaProject = new VbaProject(); | |
// Clone a single module. | |
VbaModule copyModule = doc.VbaProject.Modules["Module1"].Clone(); | |
destDoc.VbaProject.Modules.Add(copyModule); | |
destDoc.Save(dataDir + "output.docm"); |
Werken met de VBA Project Referenties
Aspose.Words API levert de VbaReferenceCollection klasse om te werken met VBA Project Referenties die een verzameling VBA projectreferenties vertegenwoordigen.
Het volgende voorbeeld van code laat zien hoe een aantal referenties uit de verzameling van referenties uit een VBA-project te verwijderen:
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
Document doc = new Document(dataDir + "VbaProject.docm"); | |
// Find and remove the reference with some LibId path. | |
const string brokenPath = "brokenPath.dll"; | |
VbaReferenceCollection references = doc.VbaProject.References; | |
for (int i = references.Count - 1; i >= 0; i--) | |
{ | |
VbaReference reference = doc.VbaProject.References.ElementAt(i); | |
string path = GetLibIdPath(reference); | |
if (path == brokenPath) | |
references.RemoveAt(i); | |
} | |
doc.Save(dataDir + "NoBrokenRef.docm"); |
// For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-.NET | |
/// <summary> | |
/// Returns string representing LibId path of a specified reference. | |
/// </summary> | |
private static string GetLibIdPath(VbaReference reference) | |
{ | |
switch (reference.Type) | |
{ | |
case VbaReferenceType.Registered: | |
case VbaReferenceType.Original: | |
case VbaReferenceType.Control: | |
return GetLibIdReferencePath(reference.LibId); | |
case VbaReferenceType.Project: | |
return GetLibIdProjectPath(reference.LibId); | |
default: | |
throw new ArgumentOutOfRangeException(); | |
} | |
} | |
/// <summary> | |
/// Returns path from a specified identifier of an Automation type library. | |
/// </summary> | |
/// <remarks> | |
/// Please see details for the syntax at [MS-OVBA], 2.1.1.8 LibidReference. | |
/// </remarks> | |
private static string GetLibIdReferencePath(string libIdReference) | |
{ | |
if (libIdReference != null) | |
{ | |
string[] refParts = libIdReference.Split('#'); | |
if (refParts.Length > 3) | |
return refParts[3]; | |
} | |
return ""; | |
} | |
/// <summary> | |
/// Returns path from a specified identifier of an Automation type library. | |
/// </summary> | |
/// <remarks> | |
/// Please see details for the syntax at [MS-OVBA], 2.1.1.12 ProjectReference. | |
/// </remarks> | |
private static string GetLibIdProjectPath(string libIdProject) | |
{ | |
return (libIdProject != null) ? libIdProject.Substring(3) : ""; | |
} |