Python を使用したプレゼンテーションでの VBA プロジェクトの管理

はじめに

Aspose.Slides は、マクロおよび VBA コードを操作するためのクラスとインターフェイスを提供します。

VBA マクロの追加

Aspose.Slides は、VBA プロジェクト (およびプロジェクト参照) を作成し、既存のモジュールを編集できるようにするために、VbaProject クラスを提供します。プレゼンテーションに埋め込まれた VBA を管理するには、VbaProject クラスを使用できます。

  1. [Presentation] クラスのインスタンスを作成します。
  2. [VbaProject] コンストラクタを使用して新しい VBA プロジェクトを追加します。
  3. VBA プロジェクトにモジュールを追加します。
  4. モジュールのソースコードを設定します。
  5. stdole への参照を追加します。
  6. Microsoft Office への参照を追加します。
  7. 参照を VBA プロジェクトに関連付けます。
  8. プレゼンテーションを保存します。

この Python コードは、プレゼンテーションに VBA マクロをゼロから追加する方法を示しています。

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat, VbaProject, VbaReferenceOleTypeLib

presentation = Presentation()
try:
    # 新しい VBA プロジェクトを作成します。
    vba_project = VbaProject()
    presentation.setVbaProject(vba_project)

    # 空のモジュールを追加し、ソースコードを設定します。
    module = vba_project.getModules().addEmptyModule("Module")
    module.setSourceCode('Sub Test(oShape As Shape)\n    MsgBox "Test"\nEnd Sub')

    # stdole と Microsoft Office の参照を作成します。
    stdole_reference = VbaReferenceOleTypeLib("stdole", r"*\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\Windows\system32\stdole2.tlb#OLE Automation")
    office_reference = VbaReferenceOleTypeLib("Office", r"*\G{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}#2.0#0#C:\Program Files\Common Files\Microsoft Shared\OFFICE14\MSO.DLL#Microsoft Office 14.0 Object Library")

    # VBA プロジェクトに参照を追加します。
    vba_project.getReferences().add(stdole_reference)
    vba_project.getReferences().add(office_reference)

    # プレゼンテーションを保存します。
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

VBA マクロの削除

[Presentation] クラスの getVbaProject メソッドを使用すると、VBA マクロを削除できます。

  1. [Presentation] クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
  2. マクロモジュールにアクセスしてそれを削除します。
  3. 変更済みのプレゼンテーションを保存します。

この Python コードは、VBA マクロを削除する方法を示しています。

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

# マクロを含むプレゼンテーションをロードします。
presentation = Presentation("VBA.pptm")
try:
    # VBA モジュールにアクセスして削除します。
    vba_project = presentation.getVbaProject()
    if vba_project is not None and len(list(vba_project.getModules())) > 0:
        module = vba_project.getModules().get_Item(0)
        vba_project.getModules().remove(module)

    # プレゼンテーションを保存します。
    presentation.save("test.pptm", SaveFormat.Pptm)
finally:
    presentation.dispose()

VBA マクロの抽出

  1. [Presentation] クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
  2. プレゼンテーションに VBA プロジェクトが含まれているか確認します。
  3. VBA プロジェクトに含まれるすべてのモジュールをループしてマクロを表示します。

この Python コードは、マクロを含むプレゼンテーションから VBA マクロを抽出する方法を示しています。

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

# マクロを含むプレゼンテーションをロードします。
presentation = Presentation("VBA.pptm")
try:
    # プレゼンテーションに VBA プロジェクトが含まれているか確認します。
    vba_project = presentation.getVbaProject()
    if vba_project is not None:
        for module in vba_project.getModules():
            print(module.getName())
            print(module.getSourceCode())
finally:
    presentation.dispose()

VBA プロジェクトがパスワードで保護されているかどうかの確認

VbaProject.isPasswordProtected メソッドを使用すると、プロジェクトのプロパティがパスワードで保護されているかどうかを判断できます。

  1. [Presentation] クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
  2. プレゼンテーションに VBA project が含まれているか確認します。
  3. VBA プロジェクトがパスワードで保護されているか確認し、プロパティを表示します。
import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation

presentation = Presentation("VBA.pptm")
try:
    # プレゼンテーションに VBA プロジェクトが含まれているか確認します。
    vba_project = presentation.getVbaProject()
    if vba_project is not None:
        if vba_project.isPasswordProtected():
            print(f"The VBA project '{vba_project.getName()}' is password-protected for viewing its properties.")
finally:
    presentation.dispose()

よくある質問

プレゼンテーションを PPTX 形式で保存した場合、マクロはどうなりますか?

PPTX は VBA をサポートしていないため、マクロは削除されます。マクロを保持したい場合は、PPTM、PPSM、または POTM を選択してください。

たとえばデータを更新するなど、プレゼンテーション内のマクロを Aspose.Slides が実行できますか?

いいえ。ライブラリは VBA コードを実行しません。実行は適切なセキュリティ設定がされた PowerPoint 内でのみ可能です。

VBA コードにリンクされた ActiveX コントロールの操作はサポートされていますか?

はい、既存の ActiveX controls にアクセスし、プロパティを変更したり削除したりできます。マクロが ActiveX と連携する際に便利です。