如何使用c#从.bas文件加载excel宏模块?

时间:2012-09-17 10:26:24

标签: c# excel excel-addins office-addins

我正在尝试编写一个excel加载项,可以自动将预定义的模块添加到活动工作簿中。

“预定义模块”应满足以下两个要求:

  1. 这些模块从excel vba编辑器导出,格式为.bas格式
  2. 用户不应看到这些.bas文件。
  3. 搜索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文件在前几行中包含一些“META”数据,之前的方法不会解析这些“META”数据,只是将所有代码输出到一个新模块中,这是不期望的。

    2. 如果我们使用以前的方法,用户可以看到.bas文件。但我们需要它们是不可见的。

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

1 个答案:

答案 0 :(得分:0)

我会这样做:

  1. 将文件从网络位置复制到本地磁盘。
  2. 从文件中删除不需要的“META”数据。
  3. 加载到Excel。
  4. 从磁盘删除本地副本。
  5. 当然,他们也可以访问网络上的文件,但他们应该更难找到。