VBA Makrolarıyla Çalışmak

Microsoft Word için Uygulamalar için Visual Basic (VBA), işlevselliği genişletmek için kullanılabilecek basit ama güçlü bir programlama dilidir. Aspose.Words API, VBA projesi kaynak koduna erişim sağlamak için üç sınıf sağlar:

  • VBAProject sınıfı VBA proje bilgilerine erişim sağlar
  • VBAModuleCollection sınıfı, VBA proje modüllerinin koleksiyonunu döndürür
  • VbaModule sınıfı VBA proje modülüne erişim sağlar
  • VbaModuleType numaralandırması bir VBA projesindeki model türlerini tanımlar. Modül bir prosedür modülü, belge modülü, sınıf modülü veya tasarımcı modülü olabilir

VBA Projesi Oluşturma

Aspose.Words API, belgede VbaProject’i almak veya ayarlamak için VbaProject özelliğini sağlar.

Aşağıdaki kod örneği, bir VBA projesinin ve VBA Modülünün nasıl oluşturulacağını, örneğin Ad ve Tür gibi temel özelliklerle birlikte gösterir:

// 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");

Makroları Oku

Aspose.Words ayrıca kullanıcılara VBA makrolarını okuma olanağı da sağlar.

Aşağıdaki kod örneği, belgeden VBA Makrolarının nasıl okunacağını gösterir:

// 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);
}
}

Makroları Yazma veya Değiştirme

Aspose.Words’i kullanarak kullanıcılar VBA makrolarını değiştirebilir.

Aşağıdaki kod örneği, SourceCode özelliğini kullanarak VBA Makrolarının nasıl değiştirileceğini gösterir:

// 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;

VBA Projesini Klonla

Aspose.Words ile VBA projelerini kopyalamak da mümkündür.

Aşağıdaki kod örneği, mevcut projenin bir kopyasını oluşturan Clone özelliğini kullanarak VBA Projesinin nasıl kopyalanacağını gösterir:

// 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");

VBA Modülünü Klonla

Gerekirse VBA modüllerini de kopyalayabilirsiniz.

Aşağıdaki kod örneği, mevcut projenin bir kopyasını oluşturan Clone özelliğini kullanarak VBA Modülünün nasıl kopyalanacağını gösterir:

// 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");

VBA Proje Referanslarıyla Çalışma

Aspose.Words API, VbaReferenceCollection sınıfının, VBA proje referanslarının bir koleksiyonunu temsil eden VBA Proje Referansları ile çalışmasını sağlar.

Aşağıdaki kod örneği, bir VBA projesindeki referans koleksiyonundan bazı referansların nasıl kaldırılacağını gösterir:

// 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) : "";
}