VBAによるプレゼンテーション
Note
マクロを含むプレゼンテーションを別のファイル形式(PDF、HTML など)に変換すると、Aspose.Slides はすべてのマクロを無視します(マクロは生成されたファイルに引き継がれません)。
プレゼンテーションにマクロを追加したり、マクロを含むプレゼンテーションを再保存した場合、Aspose.Slides は単にマクロのバイト列を書き込みます。
Aspose.Slides はプレゼンテーション内のマクロを 決して 実行しません。
VBA マクロの追加
Aspose.Slides は VbaProject クラスを提供し、VBA プロジェクト(およびプロジェクト参照)の作成や既存モジュールの編集が可能です。プレゼンテーションに埋め込まれた VBA を管理するために VbaProject クラスを使用できます。
- Presentation クラスのインスタンスを作成します。
- VbaProject コンストラクターを使用して新しい VBA プロジェクトを追加します。
- VbaProject にモジュールを追加します。
- モジュールのソースコードを設定します。
への参照を追加します。 - Microsoft Office への参照を追加します。
- 参照を VBA プロジェクトに関連付けます。
- プレゼンテーションを保存します。
この JavaScript コードは、プレゼンテーションに VBA マクロをゼロから追加する方法を示しています:
// プレゼンテーション クラスのインスタンスを作成します
let pres = new aspose.slides.Presentation();
try {
// 新しい VBA プロジェクトを作成します
pres.setVbaProject(new aspose.slides.VbaProject());
// VBA プロジェクトに空のモジュールを追加します
let module = pres.getVbaProject().getModules().addEmptyModule("Module");
// モジュールのソースコードを設定します
module.setSourceCode("Sub Test(oShape As Shape)MsgBox Test End Sub");
// <stdole> への参照を作成します
let stdoleReference = new aspose.slides.VbaReferenceOleTypeLib("stdole", "*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
// Office への参照を作成します
let officeReference = new aspose.slides.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", aspose.slides.SaveFormat.Pptm);
} finally {
if (pres != null) {
pres.dispose();
}
}
VBA マクロの削除
Presentation クラスの VbaProject プロパティを使用して、VBA マクロを削除できます。
- Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションを読み込みます。
- マクロモジュールにアクセスし、削除します。
- 変更したプレゼンテーションを保存します。
この JavaScript コードは、VBA マクロを削除する方法を示しています:
// マクロを含むプレゼンテーションを読み込みます
let pres = new aspose.slides.Presentation("VBA.pptm");
try {
// Vba モジュールにアクセスして削除します
pres.getVbaProject().getModules().remove(pres.getVbaProject().getModules().get_Item(0));
// プレゼンテーションを保存します
pres.save("test.pptm", aspose.slides.SaveFormat.Pptm);
} finally {
if (pres != null) {
pres.dispose();
}
}
VBA マクロの抽出
- Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションを読み込みます。
- プレゼンテーションに VBA プロジェクトが含まれているか確認します。
- VBA プロジェクトに含まれるすべてのモジュールをループしてマクロを表示します。
この JavaScript コードは、マクロを含むプレゼンテーションから VBA マクロを抽出する方法を示しています:
// マクロを含むプレゼンテーションを読み込みます
let pres = new aspose.slides.Presentation("VBA.pptm");
try {
// プレゼンテーションに VBA プロジェクトが含まれているか確認します
if (pres.getVbaProject() != null) {
for (let i = 0; i < pres.getVbaProject().getModules().size(); i++) {
let module = pres.getVbaProject().getModules().get_Item(i);
console.log(module.getName());
console.log(module.getSourceCode());
}
}
} finally {
if (pres != null) {
pres.dispose();
}
}
VBA プロジェクトがパスワードで保護されているかの確認
VbaProject.isPasswordProtected メソッドを使用すると、プロジェクトのプロパティがパスワードで保護されているかどうかを判断できます。
- Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションを読み込みます。
- プレゼンテーションに VBA プロジェクト が含まれているか確認します。
- VBA プロジェクトがパスワードで保護されているか確認し、プロパティを表示します。
let presentation = new aspose.slides.Presentation("VBA.pptm");
try {
if (presentation.getVbaProject() != null) { // プレゼンテーションに VBA プロジェクトが含まれているか確認します。
if (presentation.getVbaProject().isPasswordProtected()) {
console.log("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 と連携する場合に有用です。