Copia il designer dello UserForm del macro VBA dal modello al workbook di destinazione
Possibili Scenari di Utilizzo
Aspose.Cells ti permette di copiare un progetto VBA da un file Excel all’altro. Il progetto VBA è composto da vari tipi di moduli, come Documento, Procedurale, Designer, ecc. Tutti i moduli possono essere copiati con un codice semplice, ma per il modulo Designer, esiste alcuni dati extra chiamati Designer Storage che devono essere accessibili o copiati. I seguenti due metodi trattano con 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.GetDesignerStorage() e VbaModuleCollection.AddDesignerStorage().
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.
Codice di Esempio
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-.NET | |
//Create empty target workbook | |
Workbook target = new Workbook(); | |
//Load the Excel file containing VBA-Macro Designer User Form | |
Workbook templateFile = new Workbook(sourceDir + "sampleDesignerForm.xlsm"); | |
//Copy all template worksheets to target workboook | |
foreach (Worksheet ws in templateFile.Worksheets) | |
{ | |
if (ws.Type == SheetType.Worksheet) | |
{ | |
Worksheet s = target.Worksheets.Add(ws.Name); | |
s.Copy(ws); | |
//Put message in cell A2 of the target worksheet | |
s.Cells["A2"].PutValue("VBA Macro and User Form copied from template to target."); | |
} | |
}//foreach | |
//----------------------------------------------- | |
//Copy the VBA-Macro Designer UserForm from Template to Target | |
foreach (VbaModule vbaItem in templateFile.VbaProject.Modules) | |
{ | |
if (vbaItem.Name == "ThisWorkbook") | |
{ | |
//Copy ThisWorkbook module code | |
target.VbaProject.Modules["ThisWorkbook"].Codes = vbaItem.Codes; | |
} | |
else | |
{ | |
//Copy other modules code and data | |
System.Diagnostics.Debug.Print(vbaItem.Name); | |
int vbaMod = 0; | |
Worksheet sheet = target.Worksheets.GetSheetByCodeName(vbaItem.Name); | |
if (sheet == null) | |
{ | |
vbaMod = target.VbaProject.Modules.Add(vbaItem.Type, vbaItem.Name); | |
} | |
else | |
{ | |
vbaMod = target.VbaProject.Modules.Add(sheet); | |
} | |
target.VbaProject.Modules[vbaMod].Codes = vbaItem.Codes; | |
if ((vbaItem.Type == VbaModuleType.Designer)) | |
{ | |
//Get the data of the user form i.e. designer storage | |
byte[] designerStorage = templateFile.VbaProject.Modules.GetDesignerStorage(vbaItem.Name); | |
//Add the designer storage to target Vba Project | |
target.VbaProject.Modules.AddDesignerStorage(vbaItem.Name, designerStorage); | |
} | |
} | |
}//foreach | |
//Save the target workbook | |
target.Save(outputDir + "outputDesignerForm.xlsm", SaveFormat.Xlsm); |