我正在开发一个Excel VBA宏,它将获取一些excel文件,清理/清理它,并生成一个包含2张的工作簿 - 第1页是原始的“脏”文件,第2页是干净地擦除的文件。 / p>
由于我们现在有10种不同的格式,并且在路上40+ ..我想为一组给定的文件保存此输出,然后编写一个单元测试,它接受原始输入,运行我们的宏,然后将宏的输出与我们保存的预期输出进行比较。
然后,当我们进行维护时,我们可以快速轻松地进行单元测试,以确保我们不会破坏已经有效的任何东西。
这是我第一次使用VBA。我搜索框架或插件,并找不到多少帮助。我确实找到了一个比较2个excel电子表格的函数 - 所以我把那部分放下了。但现在我需要弄清楚如何实际编写和执行这个单元测试。编写单元测试应该非常简单 - 但我该如何执行呢?我不想在电子表格上放一个按钮来说明“运行单元测试”...在VBA / Excel中是否有办法只运行一个任意函数,所以我只能说右键单击我的UnitTest函数并做'运行'?
关于我的单元测试计划的任何其他反馈也将受到重视。再次感谢。
答案 0 :(得分:10)
如果是我,我会创建第二个电子表格,引用要测试的表格。 (转到工具>参考>浏览)这个新工作簿可以包含您想要的所有测试,而不必弄乱您的主工作簿。如果您需要,还可以让您自己为自己构建一个界面。
作为旁注,如果您想从Excel宏菜单中隐藏程序但仍然可以访问它们,请在模块顶部放置:
Option Private Module
然后使您希望能够使用“公共”的所有程序。然后,您可以从即时窗口(VBE中的ctrl-g)调用它们,但它们不会列在宏列表中。
但如果你将你的单元测试分开(你可能应该这样做),那么你真的不必担心公共/私人模块。
答案 1 :(得分:9)
Rubberduck是一个免费的开源VBE加载项,包含一个IDE集成的单元测试框架,适用于大多数主要的Office产品。
添加'@TestModule
属性并创建Rubberduck.AssertClass
`@TestModule
Private Assert As Rubberduck.Assert
开始编写测试。标记有'@TestMethod
属性的任何Public Sub都将被Test Explorer发现并运行。
'@TestMethod
Public Sub OnePlusOneIsTwo()
Assert.AreEqual 2, Add(1,1)
End Sub
有关详细信息,请参阅Unit Testing page of the project's wiki。
免责声明: 我是该项目的开发人员之一。
答案 2 :(得分:5)
多年来没有看过它,但vbaUnit以前效果很好......
答案 3 :(得分:1)
当然,在“开发人员”选项卡(Excel 2007)下,有一个“宏”按钮,列出了可以运行的所有可用宏。您可以从列表中选择,然后单击“运行”。旧版本具有相同的功能,但我不记得它们的位置。
以下是2003版
的链接http://spreadsheets.about.com/od/advancedexcel/ss/excel_macro_5.htm