Copiar el Diseñador de Almacenamiento de Macros VBA de la Plantilla al Libro de Trabajo Destino

Escenarios de uso posibles

Aspose.Cells para Python via .NET te permite copiar un proyecto VBA de un archivo de Excel a otro. El proyecto VBA consiste en varios tipos de módulos, es decir, Documento, Procedimental, Diseñador, etc. Todos los módulos se pueden copiar con un código simple, pero para el módulo Diseñador, hay datos adicionales llamados Almacenamiento del Diseñador que necesitan ser accedidos o copiados. Los siguientes dos métodos tratan con el Almacenamiento del Diseñador.

Copiar el diseñador de almacenamiento de formularios de usuario Macro de VBA de la plantilla al libro de Excel de destino

Por favor ve el siguiente código de muestra. Copia el proyecto VBA del archivo de Excel de plantilla en un libro vacío y lo guarda como el archivo de Excel de salida. Si abres el proyecto VBA dentro del archivo de Excel de plantilla, verás un Formulario de Usuario como se muestra a continuación. El Formulario de Usuario consta de Almacenamiento de Diseñador, así que se copiará usando los métodos VbaModuleCollection.get_designer_storage() y VbaModuleCollection.add_designer_storage().

todo:image_alt_text

La siguiente captura de pantalla muestra el archivo de Excel de salida y sus contenidos que fueron copiados del archivo de Excel de plantilla. Cuando haces clic en el Botón 1, se abre el Formulario de Usuario de VBA que a su vez tiene un botón de comando que muestra un cuadro de mensaje al hacer clic.

todo:image_alt_text

Código de muestra

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)