返回首页

大家好。
我已经搜索代码在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();

}

回答

评论会员:c 时间:2