JavaでプレゼンテーションのVBAプロジェクトを管理

VBA マクロの追加

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

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

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

// プレゼンテーション クラスのインスタンスを作成
Presentation pres = new Presentation();
try {
    // 新しい VBA プロジェクトを作成
    pres.setVbaProject(new VbaProject());
    
    // VBA プロジェクトに空のモジュールを追加
    IVbaModule module = pres.getVbaProject().getModules().addEmptyModule("Module");
    
    // モジュールのソースコードを設定
    module.setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
    
    // <stdole> への参照を作成
    VbaReferenceOleTypeLib stdoleReference = new VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
    
    // Office への参照を作成
    VbaReferenceOleTypeLib officeReference = new VbaReferenceOleTypeLib("Office",
            "*\\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 プロジェクトに参照を追加
    pres.getVbaProject().getReferences().add(stdoleReference);
    pres.getVbaProject().getReferences().add(officeReference);
   
    // プレゼンテーションを保存
    pres.save("test.pptm", SaveFormat.Pptm);
} finally {
    if (pres != null) pres.dispose();
}

VBA マクロの削除

Presentation クラスの VbaProject プロパティを使用すると、VBA マクロを削除できます。

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

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

// マクロを含むプレゼンテーションをロードします
Presentation pres = new Presentation("VBA.pptm");
try {
    // Vba モジュールにアクセスして削除します 
    pres.getVbaProject().getModules().remove(pres.getVbaProject().getModules().get_Item(0));
    
    // プレゼンテーションを保存します
    pres.save("test.pptm", SaveFormat.Pptm);
} finally {
    if (pres != null) pres.dispose();
}

VBA マクロの抽出

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

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

// マクロを含むプレゼンテーションをロードします
Presentation pres = new Presentation("VBA.pptm");
try {
    if (pres.getVbaProject() != null) // プレゼンテーションに VBA プロジェクトが含まれているか確認します
    {
        for (IVbaModule module : pres.getVbaProject().getModules())
        {
            System.out.println(module.getName());
            System.out.println(module.getSourceCode());
        }
    }
} finally {
    if (pres != null) pres.dispose();
}

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

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

  1. Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションを読み込みます。
  2. プレゼンテーションに VBA project が含まれているか確認します。
  3. VBA プロジェクトがパスワードで保護されているかチェックし、プロパティを表示します。
Presentation presentation = new Presentation("VBA.pptm");
try {
    if (presentation.getVbaProject() != null) { // プレゼンテーションに VBA プロジェクトが含まれているか確認します。
        if (presentation.getVbaProject().isPasswordProtected()) {
            System.out.printf("The VBA Project '%s' is protected by password to view project properties.", 
                    presentation.getVbaProject().getName());
        }
    }
} finally {
    presentation.dispose();
}

FAQ

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

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

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

いいえ。ライブラリは VBA コードを決して実行しません。実行は PowerPoint 内で適切なセキュリティ設定がある場合にのみ可能です。

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

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