VBA Macro UserForm DesignerStorage'ı Şablondan Hedef Çalışma Kitabına Kopyalayın
Olası Kullanım Senaryoları
Aspose.Cells, VBA projesini bir Excel dosyasından başka bir Excel dosyasına kopyalamanıza olanak tanır. VBA projesi, Belge, Prosedürel, Tasarımcı vb. gibi çeşitli modül türlerinden oluşur. Tüm modüller basit bir kodla kopyalanabilir ancak Tasarımcı modülü için, Tasarımcı Deposu adı verilen, erişilmesi veya kopyalanması gereken bazı ekstra veriler vardır. Aşağıdaki iki yöntem Tasarımcı Depolaması ile ilgilidir.
VBA Macro UserForm DesignerStorage’ı Şablondan Hedef Çalışma Kitabına Kopyalayın
Lütfen aşağıdaki örnek koda bakın. VBA projesini kopyalar.şablon excel dosyasıboş bir çalışma kitabına kaydeder veçıktı excel dosyası. Şablon Excel dosyası içinde VBA projesini açarsanız, aşağıda gösterildiği gibi bir Kullanıcı Formu göreceksiniz. Kullanıcı Formu, Tasarımcı Depolama Alanından oluşur, bu nedenle kullanılarak kopyalanacaktır.VbaModuleCollection.GetDesignerStorage() veVbaModuleCollection.AddDesignerStorage() yöntemler.
Aşağıdaki ekran görüntüsü, şablon Excel dosyasından kopyalanan çıktı Excel dosyasını ve içeriğini gösterir. Düğme 1’e tıkladığınızda, tıklandığında bir mesaj kutusu gösteren bir komut düğmesine sahip olan VBA Kullanıcı Formunu açar.
Basit kod
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
//Create empty target workbook | |
Workbook target = new Workbook(); | |
//Load the Excel file containing VBA-Macro Designer User Form | |
Workbook templateFile = new Workbook(srcDir + "sampleDesignerForm.xlsm"); | |
//Copy all template worksheets to target workboook | |
int sheetCount = templateFile.getWorksheets().getCount(); | |
for(int idx=0; idx<sheetCount; idx++) | |
{ | |
Worksheet ws = templateFile.getWorksheets().get(idx); | |
if (ws.getType() == SheetType.WORKSHEET) | |
{ | |
Worksheet s = target.getWorksheets().add(ws.getName()); | |
s.copy(ws); | |
//Put message in cell A2 of the target worksheet | |
s.getCells().get("A2").putValue("VBA Macro and User Form copied from template to target."); | |
} | |
}//for | |
//----------------------------------------------- | |
//Copy the VBA-Macro Designer UserForm from Template to Target | |
int modCount = templateFile.getWorksheets().getCount(); | |
for(int idx=0; idx<modCount; idx++) | |
{ | |
VbaModule vbaItem = templateFile.getVbaProject().getModules().get(idx); | |
if (vbaItem.getName().equals("ThisWorkbook")) | |
{ | |
//Copy ThisWorkbook module code | |
target.getVbaProject().getModules().get("ThisWorkbook").setCodes(vbaItem.getCodes()); | |
} | |
else | |
{ | |
//Copy other modules code and data | |
System.out.println(vbaItem.getName()); | |
int vbaMod = 0; | |
Worksheet sheet = target.getWorksheets().getSheetByCodeName(vbaItem.getName()); | |
if (sheet == null) | |
{ | |
vbaMod = target.getVbaProject().getModules().add(vbaItem.getType(), vbaItem.getName()); | |
} | |
else | |
{ | |
vbaMod = target.getVbaProject().getModules().add(sheet); | |
} | |
target.getVbaProject().getModules().get(vbaMod).setCodes(vbaItem.getCodes()); | |
if ((vbaItem.getType() == VbaModuleType.DESIGNER)) | |
{ | |
//Get the data of the user form i.e. designer storage | |
byte[] designerStorage = templateFile.getVbaProject().getModules().getDesignerStorage(vbaItem.getName()); | |
//Add the designer storage to target Vba Project | |
target.getVbaProject().getModules().addDesignerStorage(vbaItem.getName(), designerStorage); | |
} | |
}//else | |
}//for | |
//Save the target workbook | |
target.save(outDir + "outputDesignerForm.xlsm", SaveFormat.XLSM); |