VBAによるプレゼンテーション
Contents
[
Hide
]
Aspose.Slides.Vba 名前空間には、マクロとVBAコードを扱うためのクラスとインターフェイスが含まれています。
注意
マクロを含むプレゼンテーションを別のファイル形式(PDF、HTMLなど)に変換する場合、Aspose.Slidesはすべてのマクロを無視します(マクロは生成されたファイルに持ち越されません)。
プレゼンテーションにマクロを追加したり、マクロを含むプレゼンテーションを再保存したりする場合、Aspose.Slidesは単にマクロのバイトを書き込みます。
Aspose.Slidesはプレゼンテーション内のマクロを決して実行しません。
VBAマクロの追加
Aspose.Slidesは、VBAプロジェクトを作成(およびプロジェクト参照を追加)し、既存のモジュールを編集するためにVbaProjectクラスを提供しています。プレゼンテーションに埋め込まれたVBAを管理するためにIVbaProjectインターフェイスを使用できます。
- Presentationクラスのインスタンスを作成します。
- VbaProjectコンストラクタを使用して新しいVBAプロジェクトを追加します。
- VbaProjectにモジュールを追加します。
- モジュールのソースコードを設定します。
への参照を追加します。 - Microsoft Officeへの参照を追加します。
- 参照をVBAプロジェクトに関連付けます。
- プレゼンテーションを保存します。
この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);
}
Asposeのマクロ削除ツールをチェックすることをお勧めします。これはPowerPoint、Excel、Word文書からマクロを削除するための無料Webアプリです。
VBAマクロの削除
PresentationクラスのVbaProjectプロパティを使用すると、VBAマクロを削除できます。
- Presentationクラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
- マクロモジュールにアクセスし、それを削除します。
- 修正されたプレゼンテーションを保存します。
この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マクロの抽出
- Presentationクラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
- プレゼンテーションにVBAプロジェクトが含まれているか確認します。
- 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プロパティを使用すると、プロジェクトのプロパティがパスワード保護されているかどうかを確認できます。
- Presentationクラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
- プレゼンテーションにVBAプロジェクトが含まれているか確認します。
- プロジェクトのプロパティを表示するために、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 +
"' はプロジェクトプロパティを表示するためにパスワードで保護されています。");
}
}