我已经在网上拖网了,似乎找不到这个的简单解决方案,所以希望你能提供帮助。
我目前有一个Macro,它从.txt文件中获取数据,并每隔3分钟用最新数据覆盖一个excel文件。它使用覆盖的日期和时间命名新文件。
我想要的是使用“创建新工作簿”的工作簿'宏也可以在创建时为每个新工作簿添加一个新模块,包括模块内部预先编写的宏(插入的模块将包含用于记录工作簿何时以及何时打开和关闭的代码,因此将写入第三本工作簿,但我能做到这一点)
我希望所有这一切都可以通过第二个Sub来完成!
谢谢! 7' S
答案 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”的小子,运行时只显示一个消息框。
我相信并希望你能够接受它并以此为基础。