如何在VBA Excelmacros中设置unit testing?
我正在一个Excel VBAmacros,将采取一些Excel文件,擦洗/清理它,并产生一张工作簿2张 – 表1是原来的'脏'文件,工作表2是干净的清理文件。
由于我们现在有10种不同的格式,并且在40+以上的路上。我想为给定的一组文件保存这个输出,然后编写一个unit testing,它接受原始input,运行我们的macros,然后比较macros输出到已保存的,预期的输出。
然后在维护之后的任何时候,我们可以快速轻松地运行我们的unit testing,以确保我们不会破坏任何已经工作的东西。
这是我第一次使用VBA。 我search框架或插件,找不到太多的帮助。 我find了一个比较两个excel电子表格的函数 – 所以我把这个部分放在下面。 但是现在我需要弄清楚如何实际编写和执行这个unit testing。 编写unit testing应该非常简单 – 但我该如何执行? 我不想在电子表格上放一个button,说'运行unit testing'…有没有办法在VBA / Excel中运行一个任意函数,所以我可以说右键单击我的UnitTest函数'跑'?
任何关于我的unit testing计划的额外反馈也将不胜感激。 再次感谢。
如果是我,我会创build第二个电子表格来引用要testing的表格。 (转到工具>参考>浏览)这个新的工作簿可以包含所有您想要的testing,而不必弄脏主工作簿。 这也可以让你为自己build立一个界面,如果你想要的话。
作为一个方面说明,如果你想从Excelmacros菜单中隐藏程序,但仍然可以访问它们,在你的模块的顶部放:
Option Private Module
然后制作所有你想要使用“公开”的程序。 然后可以从即时窗口调用它们(VBE中的ctrl-g),但是它们不会被列在macros列表中。
但是,如果你保持你的unit testing分开(你可能应该),那么你不必担心公共/私人模块。
Rubberduck是一个免费的开源VBE插件,包含一个IDE集成的unit testing框架,可用于大多数主要的Office产品。
- 下载并安装最新版本 。
- 打开您的VBA项目所在的Excel工作簿。
- 转到工具>>参考并添加对Rubberduck的引用。
- 添加一个新的标准模块。
-
添加
'@TestModule
属性并创build一个Rubberduck.AssertClass
的实例`@TestModule Private Assert As Rubberduck.Assert
-
开始写testing。 任何标有
'@TestMethod
属性的Public Sub都将被Test Explorer发现并运行。'@TestMethod Public Sub OnePlusOneIsTwo() Assert.AreEqual 2, Add(1,1) End Sub
有关更多信息,请参阅项目wiki的unit testing页面 。
免责声明: 我是该项目的开发人员之一。
多年没有看过,但是vbaUnit以前用得不错
当然,在“开发人员”选项卡(Excel 2007)下有一个“macros”button,列出可以运行的所有可用macros。 您可以从列表中select并单击运行。 旧版本具有相同的function,但我不记得他们位于哪里。
这是2003版的链接
http://spreadsheets.about.com/od/advancedexcel/ss/excel_macro_5.htm