VBA マクロの操作

Microsoft Word 用の Visual Basic for Applications (VBA) は、機能を拡張するために使用できるシンプルだが強力なプログラミング言語です。 Aspose.Words API には、VBA プロジェクトのソース コードにアクセスするための 3 つのクラスが用意されています。

  • VBAProject クラスは、VBA プロジェクト情報へのアクセスを提供します。
  • VBAModuleCollection クラスは、VBA プロジェクト モジュールのコレクションを返します。
  • VbaModule クラスは、VBA プロジェクト モジュールへのアクセスを提供します。
  • VbaModuleType 列挙は、VBA プロジェクト内のモデルのタイプを定義します。モジュールは、手続き型モジュール、ドキュメント モジュール、クラス モジュール、またはデザイナー モジュールです。

VBA プロジェクトを作成する

Aspose.Words API は、ドキュメント内の VbaProject を取得または設定するための vba_project プロパティを提供します。

次のコード例は、nametype などの基本プロパティとともに VBA プロジェクトと VBA モジュールを作成する方法を示しています。

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document()
project = aw.vba.VbaProject()
project.name = "AsposeProject"
doc.vba_project = project
# Create a new module and specify a macro source code.
module = aw.vba.VbaModule()
module.name = "AsposeModule"
module.type = aw.vba.VbaModuleType.PROCEDURAL_MODULE
module.source_code = "New source code"
# Add module to the VBA project.
doc.vba_project.modules.add(module)
doc.save(docs_base.artifacts_dir + "WorkingWithVba.create_vba_project.docm")

マクロの読み取り

Aspose.Words は、ユーザーに VBA マクロを読み取る機能も提供します。

次のコード例は、ドキュメントから VBA マクロを読み取る方法を示しています。

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "VBA project.docm")
if (doc.vba_project != None) :
for module in doc.vba_project.modules :
print(module.source_code)

マクロの作成または変更

Aspose.Words を使用すると、ユーザーは VBA マクロを変更できます。

次のコード例は、source_code プロパティを使用して VBA マクロを変更する方法を示しています。

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "VBA project.docm")
project = doc.vba_project
newSourceCode = "Test change source code"
project.modules[0].source_code = newSourceCode
doc.save(docs_base.artifacts_dir + "WorkingWithVba.modify_vba_macros.docm")

VBA プロジェクトのクローンを作成する

Aspose.Words を使用すると、VBA プロジェクトのクローンを作成することもできます。

次のコード例は、既存のプロジェクトのコピーを作成する clone プロパティを使用して VBA プロジェクトのクローンを作成する方法を示しています。

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "VBA project.docm")
destDoc = aw.Document()
destDoc.vba_project = doc.vba_project.clone()
destDoc.save(docs_base.artifacts_dir + "WorkingWithVba.clone_vba_project.docm")

VBA モジュールのクローンを作成する

必要に応じて、VBA モジュールのクローンを作成することもできます。

次のコード例は、既存のプロジェクトのコピーを作成する clone プロパティを使用して VBA モジュールのクローンを作成する方法を示しています。

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "VBA project.docm")
destDoc = aw.Document()
destDoc.vba_project = aw.vba.VbaProject()
copyModule = doc.vba_project.modules.get_by_name("Module1").clone()
destDoc.vba_project.modules.add(copyModule)
destDoc.save(docs_base.artifacts_dir + "WorkingWithVba.clone_vba_module.docm")

VBA プロジェクトの使用

Aspose.Words API は、VBA プロジェクト参照のコレクションを表す VBA プロジェクト参照を操作するための VbaReferenceCollection クラスを提供します。

次のコード例は、VBA プロジェクトの参照のコレクションから一部の参照を削除する方法を示しています。

# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
doc = aw.Document(docs_base.my_dir + "VBA project.docm")
# Find and remove the reference with some LibId path.
brokenPath = "brokenPath.dll"
references = doc.vba_project.references
for i in range(references.count - 1, 0) :
reference = doc.vba_project.references.element_at(i)
path = get_lib_id_path(reference)
if (path == brokenPath) :
references.remove_at(i)
doc.save(docs_base.artifacts_dir + "WorkingWithVba.remove_broken_ref.docm")
# For complete examples and data files, please go to https://github.com/aspose-words/Aspose.Words-for-Python-via-.NET
# <summary>
# Returns string representing LibId path of a specified reference.
# </summary>
def get_lib_id_path(self, reference) :
if reference.type == aw.vba.VbaReferenceType.REGISTERED or reference.type == aw.vba.VbaReferenceType.ORIGINAL or reference.type == aw.vba.VbaReferenceType.CONTROL :
return self.get_lib_id_reference_path(reference.lib_id)
elif reference.type == aw.vba.VbaReferenceType.PROJECT :
return self.get_lib_id_project_path(reference.lib_id)
else :
raise RuntimeError()
# <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>
@staticmethod
def get_lib_id_reference_path(libIdReference : str) :
if (libIdReference != None) :
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>
@staticmethod
def get_lib_id_project_path(libIdProject : str) :
if (libIdProject != None) :
return libIdProject.substring(3)
return ""