VBA projektek kezelése bemutatókban C++ használatával
Bevezetés
Az Aspose.Slides.Vba névtér osztályokat és interfészeket tartalmaz a makrókkal és a VBA kóddal való munkához.
Megjegyzés
Amikor egy makrókat tartalmazó bemutatót más fájlformátumba (PDF, HTML stb.) konvertálsz, az Aspose.Slides figyelmen kívül hagyja az összes makrót (a makrók nem kerülnek át a létrehozott fájlba).
Amikor makrókat adsz egy bemutatóhoz vagy újra mented a makrókat tartalmazó bemutatót, az Aspose.Slides egyszerűen a makrók bájtait írja.
Az Aspose.Slides soha nem futtatja a makrókat egy bemutatóban.
VBA makrók hozzáadása
Az Aspose.Slides a VbaProject osztályt biztosítja, hogy VBA projekteket (és projekt hivatkozásokat) hozz létre, és meglévő modulokat szerkessz. A IVbaProject interfészt használhatod a bemutatóba beágyazott VBA kezelésére.
- Hozz létre egy példányt a Presentation osztályból.
- Használd a VbaProject konstruktorát egy új VBA projekt hozzáadásához.
- Adj hozzá egy modult a VbaProject-hez.
- Állítsd be a modul forráskódját.
- Adj hozzá hivatkozásokat a
-hez. - Adj hozzá hivatkozásokat a Microsoft Office-hoz.
- Társítsd a hivatkozásokat a VBA projekthez.
- Mentsd el a bemutatót.
Ez a C++ kód azt mutatja be, hogyan adhatunk hozzá egy VBA makrót a semmiből egy bemutatóhoz:
// A dokumentumok könyvtárának elérési útja.
const String outPath = u"../out/AddVBAMacros_out.pptm";
// Létrehozza a Presentation osztály példányát
SharedPtr<Presentation> presentation = MakeObject<Presentation>();
// Létrehozza az új VBA projektet
presentation->set_VbaProject(MakeObject<VbaProject>());
// Üres modult ad hozzá a VBA projekthez
SharedPtr<IVbaModule> module = presentation->get_VbaProject()->get_Modules()->AddEmptyModule(u"Module");
// Beállítja a modul forráskódját
module->set_SourceCode(u"Sub Test(oShape As Shape) MsgBox \"Test\" End Sub");
// Létrehozza a <stdole> hivatkozást
SharedPtr<VbaReferenceOleTypeLib> stdoleReference =
MakeObject<VbaReferenceOleTypeLib>(u"stdole", u"*\\G{00020430-0000-0000-C000-000000000046}#2.0#0#C:\\Windows\\system32\\stdole2.tlb#OLE Automation");
// Létrehozza az Office hivatkozást
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");
// Hivatkozásokat ad a VBA projekthez
presentation->get_VbaProject()->get_References()->Add(stdoleReference);
presentation->get_VbaProject()->get_References()->Add(officeReference);
// Mentés a prezentációt
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);
VBA makrók eltávolítása
A VbaProject tulajdonságot a Presentation osztály alatt használva eltávolíthatod a VBA makrót.
- Hozz létre egy példányt a Presentation osztályból, és töltsd be a makrót tartalmazó bemutatót.
- Érd el a Makró modult, és távolítsd el.
- Mentsd el a módosított bemutatót.
Ez a C++ kód azt mutatja be, hogyan távolítható el egy VBA makró:
// A dokumentumok könyvtárának elérési útja.
const String outPath = u"../out/RemoveVBAMacros_out.pptm";
const String templatePath = u"../templates/vba.pptm";
// Betölti a makrót tartalmazó bemutatót
SharedPtr<Presentation> presentation = MakeObject<Presentation>(templatePath);
// Eléri a Vba modult, és eltávolítja
presentation->get_VbaProject()->get_Modules()->Remove(presentation->get_VbaProject()->get_Modules()->idx_get(0));
// Mentés a prezentációt
presentation->Save(outPath, Aspose::Slides::Export::SaveFormat::Pptm);
VBA makrók kinyerése
- Hozz létre egy példányt a Presentation osztályból, és töltsd be a makrót tartalmazó bemutatót.
- Ellenőrizd, hogy a bemutató tartalmaz-e VBA projektet.
- Iterálj végig a VBA Projektben található összes modulon a makrók megtekintéséhez.
Ez a C++ kód azt mutatja be, hogyan nyerhetők ki VBA makrók egy makrókat tartalmazó bemutatóból:
// A dokumentumok könyvtárának elérési útja.
const String templatePath = u"../templates/VBA.pptm";
// Betölti a makrót tartalmazó bemutatót
SharedPtr<Presentation> pres = MakeObject<Presentation>(templatePath);
if (pres->get_VbaProject() != NULL) // Ellenőrzi, hogy a bemutató tartalmaz-e VBA projektet
{
//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());
}
}
Ellenőrizd, hogy a VBA projekt jelszóval védett-e
Az IVbaProject::get_IsPasswordProtected tulajdonság használatával meghatározhatod, hogy egy projekt tulajdonságai jelszóval védettek-e.
- Hozz létre egy példányt a Presentation osztályból, és tölts be egy makrót tartalmazó bemutatót.
- Ellenőrizd, hogy a bemutató tartalmaz-e egy VBA project elemet.
- Ellenőrizd, hogy a VBA projekt jelszóval védett-e, hogy megtekinthesd annak tulajdonságait.
auto presentation = MakeObject<Presentation>(u"VBA.pptm");
if (presentation->get_VbaProject() != nullptr) // Ellenőrzi, hogy a bemutató tartalmaz-e VBA projektet.
{
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();
GYIK
Mi történik a makrókkal, ha PPTX formátumban mentem a bemutatót?
A makrók eltávolításra kerülnek, mivel a PPTX nem támogatja a VBA-t. A makrók megtartásához válaszd a PPTM, PPSM vagy POTM formátumot.
Futtathatja az Aspose.Slides a makrókat egy bemutatóban, például adatfrissítéshez?
Nem. A könyvtár soha nem hajt végre VBA kódot; a végrehajtás csak a PowerPointban lehetséges a megfelelő biztonsági beállításokkal.
Támogatott-e az ActiveX vezérlők VBA kóddal való kapcsolatának kezelése?
Igen, elérheted a meglévő ActiveX controls elemeket, módosíthatod azok tulajdonságait, és eltávolíthatod őket. Ez akkor hasznos, ha a makrók az ActiveX-szel kommunikálnak.