VBAによるプレゼンテーション

Aspose.Slides.Vba 名前空間には、マクロとVBAコードを扱うためのクラスとインターフェイスが含まれています。

VBAマクロの追加

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

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

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

    // プレゼンテーションクラスのインスタンスを作成
using (Presentation presentation = new Presentation())
{
    // 新しいVBAプロジェクトを作成
    presentation.VbaProject = new VbaProject();

    // VBAプロジェクトに空のモジュールを追加
    IVbaModule module = presentation.VbaProject.Modules.AddEmptyModule("Module");
  
    // モジュールのソースコードを設定
    module.SourceCode = @"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プロジェクトに参照を追加
    presentation.VbaProject.References.Add(stdoleReference);
    presentation.VbaProject.References.Add(officeReference);

            
    // プレゼンテーションを保存
    presentation.Save(dataDir + "AddVBAMacros_out.pptm", SaveFormat.Pptm);
}

VBAマクロの削除

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

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

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

    // マクロを含むプレゼンテーションをロード
using (Presentation presentation = new Presentation(dataDir + "VBA.pptm"))
{
    // Vbaモジュールにアクセスし、削除
    presentation.VbaProject.Modules.Remove(presentation.VbaProject.Modules[0]);

    // プレゼンテーションを保存
    presentation.Save(dataDir + "RemovedVBAMacros_out.pptm", SaveFormat.Pptm);
}

VBAマクロの抽出

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

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

    // マクロを含むプレゼンテーションをロード
using (Presentation pres = new Presentation("VBA.pptm"))
{
	if (pres.VbaProject != null) // プレゼンテーションにVBAプロジェクトが含まれているか確認
	{
		foreach (IVbaModule module in pres.VbaProject.Modules)
		{
			Console.WriteLine(module.Name);
			Console.WriteLine(module.SourceCode);
		}
	}
}

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

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

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

このC#コードは、その操作を示しています:

using (Presentation pres = new Presentation("VBA.pptm"))
{
    if (pres.VbaProject == null) // プレゼンテーションにVBAプロジェクトが含まれているか確認
        return;

    if (pres.VbaProject.IsPasswordProtected)
    {
        Console.WriteLine("VBAプロジェクト '" + pres.VbaProject.Name +
                            "' はプロジェクトプロパティを表示するためにパスワードで保護されています。");
    }
}