2012-09-17 58 views
0

我试图写一个Excel插件,可以自动添加预定义模块插入到活动工作簿。如何使用c#从.bas文件加载excel宏模块?

“预定义模块”应符合以下两个条件:

  1. 这些模块从Excel VBA编辑器出口,在.BAS格式
  2. 这些.BAS文件不应该对用户可见。

搜索MSDN之后,我发现this trick做类似的事情:

void load_module(EXCEL.Workbook oBook){ 
    VBIDE.VBComponent oModule; 
    oModule = oBook.VBProject.VBComponents.Add(VBIDE.vbext_ComponentType.vbext_ct_StdModule); 
    oModule.Name = "module_name"; 
    sCode = "vba script content"; 
    oModule.CodeModule.AddFromString(sCode); 
    //oModule.CodeModule.AddFromFile(file_name); 
} 

的“AddFromFile”方法的工作,但只有当文件只包含VBA代码和文件必须在磁盘。

的问题是:

  1. 用Excel VBA编辑器生成的文件.BAS包含前几行一些“元”的数据,前面的方法不会解析这些“元”的数据,只是将所有代码输出到一个新的模块中,这是不期望的。

  2. 如果我们使用上述方法,在.BAS文件将是用户可见。但我们需要他们成为无形的。

那么,你有什么想法解决这个烂摊子吗? :)

回答

0

我会做如下:从网络位置

  1. 将文件复制到本地磁盘。
  2. 从文件中删除不需要的“元”的数据。
  3. 加载到Excel中。
  4. 从磁盘删除本地副本。

当然,网络上的文件也可以被他们访问,但它们应该很难找到。

+0

这些元数据是有用的。例如,“CLASS”元只是定义这是一个类定义还是一个模块定义。 – lowatt