Kopieren des VBA Makro UserForm DesignerStorage von der Vorlage in die Zieltabelle

Mögliche Verwendungsszenarien

Aspose.Cells for Python via .NET ermöglicht es, ein VBA-Projekt von einer Excel-Datei in eine andere zu kopieren. Das VBA-Projekt besteht aus verschiedenen Modultypen, z.B. Dokument, Verfahren, Design, usw. Alle Module können mit einfachem Code kopiert werden, aber für das Designer-Modul gibt es zusätzliche Daten namens Designer Storage, auf die zugegriffen oder die kopiert werden müssen. Die folgenden zwei Methoden befassen sich mit Designer Storage.

Kopieren Sie den VBA-Makro UserForm-DesignerStorage von der Vorlage in die Zieldatei

Bitte sehen Sie den folgenden Beispielcode. Er kopiert das VBA-Projekt aus der Vorlagen-Excel-Datei in eine leere Arbeitsmappe und speichert sie als die Ausgabedatei. Wenn Sie das VBA-Projekt innerhalb der Vorlagen-Excel-Datei öffnen, sehen Sie ein Benutzerformular wie unten gezeigt. Das Benutzerformular besteht aus Designer Storage, daher wird es mithilfe der Methoden VbaModuleCollection.get_designer_storage() und VbaModuleCollection.add_designer_storage() kopiert.

todo:image_alt_text

Das nachfolgende Screenshot zeigt die Ausgabedatei und deren Inhalt, die aus der Vorlagen-Excel-Datei kopiert wurden. Wenn Sie auf die Schaltfläche 1 klicken, wird das VBA-Benutzerformular geöffnet, das selbst über eine Befehlsschaltfläche verfügt, die beim Klicken eine Meldungsfeld anzeigt.

todo:image_alt_text

Beispielcode

from aspose.cells import SaveFormat, SheetType, Workbook
from aspose.cells.vba import VbaModuleType
# For complete examples and data files, please go to https:# github.com/aspose-cells/Aspose.Cells-for-.NET
# Create empty target workbook
target = Workbook()
# Load the Excel file containing VBA-Macro Designer User Form
templateFile = Workbook(sourceDir + "sampleDesignerForm.xlsm")
# Copy all template worksheets to target workboook
for ws in templateFile.worksheets:
if ws.type == SheetType.WORKSHEET:
s = target.worksheets.add(ws.name)
s.copy(ws)
# Put message in cell A2 of the target worksheet
s.cells.get("A2").put_value("VBA Macro and User Form copied from template to target.")
# -----------------------------------------------
# Copy the VBA-Macro Designer UserForm from Template to Target
for vbaItem in templateFile.vba_project.modules:
if vbaItem.name == "ThisWorkbook":
# Copy ThisWorkbook module code
target.vba_project.modules.get("ThisWorkbook").codes = vbaItem.codes
else:
# Copy other modules code and data
print(vbaItem.name)
vbaMod = 0
sheet = target.worksheets.get_sheet_by_code_name(vbaItem.name)
if sheet == None:
vbaMod = target.vba_project.modules.add(vbaItem.type, vbaItem.name)
else:
vbaMod = target.vba_project.modules.add(sheet)
target.vba_project.modules[vbaMod].codes = vbaItem.codes
if vbaItem.type == VbaModuleType.DESIGNER:
# Get the data of the user form i.e. designer storage
designerStorage = templateFile.vba_project.modules.get_designer_storage(vbaItem.name)
# Add the designer storage to target Vba Project
target.vba_project.modules.add_designer_storage(vbaItem.name, designerStorage)
# Save the target workbook
target.save(outputDir + "outputDesignerForm.xlsm", SaveFormat.XLSM)