大家好。
我已经搜索代码在C#创建Excel文档的VBAProject动态添加宏代码。我发现这样的事情 - 下面一段代码。创建工作簿和宏正如我期望的那样,但它有一个问题。在保存文件(线wb.SaveAs)成为一个整体的VBAProject锁定,我已经无法访问了。当我点击项目Excel中说,该项目是看不到这个。我仍然可以执行,这是由C#(FormatSheet)加入宏,但不能编辑代码。
奇怪的事情,当我试图用线:wb.Save();然后的VBAProject未锁定(但我不得不手动保存在Excel文件)
。这是错误的参数我使用方法的SaveAs
我的Office版本是2003年。
我会为任何朱开宏欣赏。
string MyFile = Path.GetFullPath(".") + @"\sample.xls";
Excel.Application xl = null;
Excel._Workbook wb = null;
Excel._Worksheet sheet = null;
VBIDE.VBComponent module = null;
try
{
if (File.Exists(FileName)) { File.Delete(FileName); }
GC.Collect();
xl = new Excel.Application();
xl.Visible = true;
wb = (Excel._Workbook)(xl.Workbooks.Add( Missing.Value ));
sheet = (Excel._Worksheet)wb.ActiveSheet;
for(int r = 0;r<20;r++)
{
for(int c=0;c<10;c++)
{
sheet.Cells[r + 1, c+1] = 125;
}
}
module = wb.VBProject.VBComponents.Add( VBIDE.vbext_ComponentType.vbext_ct_StdModule);
module.CodeModule.AddFromString(GetMacro);
//wb.Save();
wb.SaveAs(FileName,Excel.XlFileFormat.xlWorkbookNormal , null, null, false, false,Excel.XlSaveAsAccessMode.xlShared,false,false,null,null,null);
}
catch( Exception theException )
{
Console.WriteLine(theException.Message );
}
finally
{
try
{
xl.Visible = false;
xl.UserControl = false;
xl.Workbooks.Close();
}
catch { }
xl.Quit();
if (module != null) { Marshal.ReleaseComObject (module); }
if (sheet !=null) { Marshal.ReleaseComObject (sheet); }
if (wb !=null) { Marshal.ReleaseComObject (wb); }
if (xl !=null) { Marshal.ReleaseComObject (xl); }
module = null;
sheet=null;
wb=null;
xl = null;
GC.Collect();
}
private static string GetMacro()
{
StringBuilder sb = new StringBuilder();
sb.Append("Sub FormatSheet()" + "\n");
sb.Append(" Range(\"A6:J13\").Select " + "\n");
sb.Append(" Selection.Font.ColorIndex = 3" + "\n");
sb.Append("End Sub");
return sb.ToString();
}