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.

yapılacaklar:resim_alternatif_metin

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.

yapılacaklar:resim_alternatif_metin

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);