如何在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产品。

  1. 下载并安装最新版本 。
  2. 打开您的VBA项目所在的Excel工作簿。
  3. 转到工具>>参考并添加对Rubberduck的引用。
  4. 添加一个新的标准模块。
  5. 添加'@TestModule属性并创build一个Rubberduck.AssertClass的实例

     `@TestModule Private Assert As Rubberduck.Assert 
  6. 开始写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