نسخ مصمم مستخدم النموذج التقديمي للماكرو VBA من القالب إلى كتاب العمل الهدف

سيناريوهات الاستخدام المحتملة

تتيح Aspose.Cells لك نسخ مشروع VBA من ملف Excel إلى آخر. يتكون مشروع VBA من أنواع مختلفة من الوحدات مثل المستند والإجرائي والتصميم وما إلى ذلك. يمكن نسخ جميع الوحدات بكود بسيط ولكن بالنسبة للوحدة التصميمية، هناك بعض البيانات الإضافية تسمى تخزين المصمم التي يجب الوصول إليها أو نسخها. تدير الأساليب المطروحة التاليتان تخزين المصمم.

نسخ تصميم الاستوديو Form UserForm VBA Macro من القالب إلى دفتر العمل الهدف

يرجى الاطلاع على الكود العيني التالي. يقوم بنسخ مشروع VBA من ملف Excel القالب إلى دفتر عمل فارغ ويحفظه باسم ملف Excel الناتج. إذا فتحت مشروع VBA داخل ملف Excel القالب، سترى استوديو المستخدم كما هو مبين أدناه. يتكون استوديو المستخدم من تصميم الاستوديو الذي سيتم نسخه باستخدام الأساليب VbaModuleCollection.GetDesignerStorage() و VbaModuleCollection.AddDesignerStorage().

todo:image_alt_text

تُظهر اللقطة الشاشية التالية ملف Excel الناتج ومحتوياته التي تم نسخها من ملف Excel القالب. عند النقر فوق الزر 1، يفتح استوديو المستخدم VBA الذي بحد ذاته يحتوي على زر أمر يعرض صندوق رسائل عند النقر عليه.

todo:image_alt_text

الكود المثالي

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