使用VBA将模块插入新工作簿

时间:2014-07-17 15:23:22

标签: excel vba excel-vba

我已经在网上拖网了,似乎找不到这个的简单解决方案,所以希望你能提供帮助。

我目前有一个Macro,它从.txt文件中获取数据,并每隔3分钟用最新数据覆盖一个excel文件。它使用覆盖的日期和时间命名新文件。

我想要的是使用“创建新工作簿”的工作簿'宏也可以在创建时为每个新工作簿添加一个新模块,包括模块内部预先编写的宏(插入的模块将包含用于记录工作簿何时以及何时打开和关闭的代码,因此将写入第三本工作簿,但我能做到这一点)

我希望所有这一切都可以通过第二个Sub来完成!

谢谢! 7' S

1 个答案:

答案 0 :(得分:7)

我会让你开始在工作簿中添加一个新模块,但不可能为你编写所有内容。

我们将使用VBA可扩展性库(VBE)。它包含组成VBProject的对象的定义。因此,在开始之前,请务必添加此引用:

  

Microsoft Visual Basic for Applications Extensibility 5.3

到你的工作簿。为此,请在VBA编辑器中转到工具菜单,然后选择参考。在该对话框中,向下滚动并检查 Microsoft Visual Basic For Applications Extensibility 5.3 的条目。如果未设置此引用,则会收到编译器错误。

您还需要启用对VBA项目的编程访问。为此(在Excel 2010中 - 其他版本的类似步骤),转到文件>选项>信托中心>信任中心设置...>宏设置并勾选信任访问VBA项目对象模型

现在你准备好了代码:

Public Sub AddNewModule()

  Dim proj As VBIDE.VBProject
  Dim comp As VBIDE.VBComponent

  Set proj = ActiveWorkbook.VBProject
  Set comp = proj.VBComponents.Add(vbext_ct_StdModule)
  comp.Name = "MyNewModule"

  Set codeMod = comp.CodeModule

  With codeMod
    lineNum = .CountOfLines + 1
    .InsertLines lineNum, "Public Sub ANewSub()"
    lineNum = lineNum + 1
    .InsertLines lineNum, "  MsgBox " & """" & "I added a module!" & """"
    lineNum = lineNum + 1
    .InsertLines lineNum, "End Sub"
  End With

End Sub

这将为活动工作簿添加一个名为“MyNewModule”的新标准模块,并硬编码一个名为“ANewSub”的小子,运行时只显示一个消息框。

我相信并希望你能够接受它并以此为基础。