Kopieren des VBA Makro UserForm DesignerStorage von der Vorlage in die Zieltabelle
Mögliche Verwendungsszenarien
Aspose.Cells ermöglicht es Ihnen, ein VBA-Projekt aus einer Excel-Datei in eine andere Excel-Datei zu kopieren. Das VBA-Projekt besteht aus verschiedenen Arten von Modulen, z. B. Dokument-, Prozedur- oder Designer-Modulen. Alle Module können mit einem einfachen Code kopiert werden, aber für das Designer-Modul gibt es zusätzliche Daten namens Designer Storage, die benötigt werden, um darauf zuzugreifen oder es zu kopieren. Die folgenden beiden Methoden beschäftigen 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.GetDesignerStorage() und VbaModuleCollection.AddDesignerStorage() kopiert.
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.
Beispielcode
// 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); |