C++ を使用したプレゼンテーションの 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 マクロを最初から追加する方法を示します:

// ドキュメントディレクトリへのパス。
const String outPath = u"../out/AddVBAMacros_out.pptm";

// Presentation クラスのインスタンスを作成
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// 新しい VBA プロジェクトを作成
presentation->set_VbaProject(MakeObject<VbaProject>());

// VBA プロジェクトに空のモジュールを追加
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");

// モジュールのソースコードを設定
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");

// <stdole> への参照を作成
SharedPtr<VbaReferenceOleTypeLib> stdoleReference =
	MakeObject<VbaReferenceOleTypeLib>(u"stdole", u"*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");

// Office への参照を作成
SharedPtr<VbaReferenceOleTypeLib> officeReference =
	MakeObject<VbaReferenceOleTypeLib>(u"Office", u"*\\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->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);

// プレゼンテーションを保存
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

VBA マクロの削除

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

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

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

// ドキュメントディレクトリへのパス。
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";

// マクロを含むプレゼンテーションを読み込む
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);

// Vba モジュールにアクセスして削除する
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));

// プレゼンテーションを保存
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);

VBA マクロの抽出

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

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


	// ドキュメントディレクトリへのパス。
	const String templatePath = u"../templates/VBA.pptm";

	// マクロを含むプレゼンテーションを読み込む
	SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);


	if (pres->get_VbaProject() != NULL) // プレゼンテーションに VBA プロジェクトが含まれているか確認
	{
		
		//for (SharedPtr<IVbaModule> module : pres->get_VbaProject()->get_Modules())
		for (int i = 0; i < pres->get_VbaProject()->get_Modules()->get_Count(); i++)
		{
			SharedPtr<IVbaModule> module = pres->get_VbaProject()->get_Modules()->idx_get(i);

			System::Console::WriteLine(module->get_Name());
			System::Console::WriteLine(module->get_SourceCode());
		}
	}

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

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

  1. Presentation クラスのインスタンスを作成し、マクロを含むプレゼンテーションをロードします。
  2. プレゼンテーションに VBA project が含まれているか確認します。
  3. VBA プロジェクトがパスワードで保護されているか確認し、プロパティを表示します。
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
    
if (presentation->get_VbaProject() != nullptr) // プレゼンテーションに VBA プロジェクトが含まれているか確認します。
{
    if (presentation->get_VbaProject()->get_IsPasswordProtected())
    {
        Console::WriteLine(u"The VBA Project '{0}' is protected by password to view project properties.", presentation->get_VbaProject()->get_Name());
    }
}
    
presentation->Dispose();

FAQ

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

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

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

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

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

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