Copia il designer dello UserForm del macro VBA dal modello al workbook di destinazione

Possibili Scenari di Utilizzo

Aspose.Cells per Python via .NET ti permette di copiare un progetto VBA da un file Excel a un altro. Il progetto VBA consiste in vari tipi di moduli, ad esempio Documento, Procedurale, Designer, ecc. Tutti i moduli possono essere copiati con codice semplice, ma per il modulo Designer, ci sono alcuni dati aggiuntivi chiamati Designer Storage che devono essere accessibili o copiati. I seguenti due metodi si occupano di Designer Storage.

Copia il DesignerStorage del modulo utente VBA Macro dal modello al foglio di lavoro di destinazione

Si prega di vedere il codice di esempio seguente. Copia il progetto VBA dal file Excel modello in un workbook vuoto e lo salva come il file Excel di output. Se apri il progetto VBA all’interno del file Excel modello, vedrai un User Form come mostrato di seguito. Il User Form è composto da Designer Storage, quindi verrà copiato utilizzando i metodi VbaModuleCollection.get_designer_storage() e VbaModuleCollection.add_designer_storage().

todo:image_alt_text

La seguente schermata mostra il file Excel di output e i suoi contenuti che sono stati copiati dal file Excel modello. Quando fai clic sul Pulsante 1, si apre il VBA User Form che ha a sua volta un pulsante di comando che mostra una finestra di messaggio cliccando.

todo:image_alt_text

Codice di Esempio

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)