Copier le UserForm DesignerStorage du macro VBA du modèle vers le classeur cible
Scénarios d’utilisation possibles
Aspose.Cells pour Python via .NET vous permet de copier un projet VBA d’un fichier Excel à un autre. Le projet VBA se compose de divers types de modules, tels que Document, Procédural, Designer, etc. Tous les modules peuvent être copiés avec un code simple, mais pour le module Designer, il existe des données supplémentaires appelées Designer Storage qui doivent être accessibles ou copiées. Les deux méthodes suivantes traitent du Designer Storage.
Copier le stockage de concepteur de formulaire utilisateur de macro VBA du modèle vers le classeur cible
Veuillez consulter le code d’exemple suivant. Il copie le projet VBA du fichier Excel modèle dans un classeur vide et le sauvegarde en tant que fichier Excel de sortie. Si vous ouvrez le projet VBA à l’intérieur du fichier Excel modèle, vous verrez un formulaire utilisateur comme indiqué ci-dessous. Le formulaire utilisateur se compose de Stockage du concepteur, il sera donc copié en utilisant les méthodes VbaModuleCollection.get_designer_storage() et VbaModuleCollection.add_designer_storage().
La capture d’écran suivante montre le fichier Excel de sortie et ses contenus qui ont été copiés du fichier Excel modèle. Lorsque vous cliquez sur le Bouton 1, cela ouvre le formulaire utilisateur VBA qui a lui-même un bouton de commande qui affiche une boîte de dialogue lorsqu’il est cliqué.
Code d’exemple
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) |