gpt4 book ai didi

excel - 如何在没有 Rubberduck TestModules 的情况下交付 Excel VBA 应用程序?

转载 作者:行者123 更新时间:2023-12-02 05:24:12 25 4
gpt4 key购买 nike

我一直在使用 Rubberduck VBA 插件。

我想“交付”我的 Excel 应用程序,而不使用引用资料中的 Rubberduck 插件。你是如何做到这一点的?例如,是否可以“隐藏”测试模块而不编译它们?

最佳答案

如果您的测试模块是早期绑定(bind)的(这在开发时是一个好主意!),那么您应该在交付之前删除对 Rubberduck 类型库的引用。

当然,您可以简单地删除测试模块,但这会成为重新导入和导出的烦恼......并且您不想这样做。

可以按原样交付项目(带有测试模块,但没有对Rubberduck的引用),因为测试模块不会出现在实际实时代码的任何执行路径中:项目不会编译,但它仍然可以正常运行(除非有人尝试调用测试方法..然后将加载测试模块,并且编译器将注意到缺少的库)。

但我的建议是更进一步,后期绑定(bind) AssertClass 实例(以及 FakesProvider,如果您使用该 API):

Option Explicit
Option Private Module

'@TestModule
'@Folder("Tests")

Private Assert As Object
Private Fakes As Object

'@ModuleInitialize
Private Sub ModuleInitialize()
'this method runs once per module.
Set Assert = CreateObject("Rubberduck.AssertClass")
Set Fakes = CreateObject("Rubberduck.FakesProvider")
End Sub

'@ModuleCleanup
Private Sub ModuleCleanup()
'this method runs once per module.
Set Assert = Nothing
Set Fakes = Nothing
End Sub

随着测试后期绑定(bind),该项目现在将使用包含的测试模块进行编译。当然,调用测试方法会崩溃(除非 Rubberduck 在那台机器上!),但是测试模块不应该位于 VBA 项目的任何执行路径中。

您可以将Rubberduck配置为默认后期绑定(bind)新测试模块:

Unit Test Settings

如果您使用“Permissive assert”(它以类似 VBA 的宽容方式实现类型相等),则您要用于后期绑定(bind)的 ProgID 是 Rubberduck.PermissiveAssertClass

一个相对较新的可能配置是“双重绑定(bind)”,它设置新的测试模块如下:

Option Explicit
Option Private Module

'@TestModule
'@Folder("Tests")

#Const LateBind = LateBindTests

#If LateBind Then
Private Assert As Object
Private Fakes As Object
#Else
Private Assert As Rubberduck.PermissiveAssertClass
Private Fakes As Rubberduck.FakesProvider
#End If

'@ModuleInitialize
Private Sub ModuleInitialize()
'this method runs once per module.
#If LateBind Then
Set Assert = CreateObject("Rubberduck.PermissiveAssertClass")
Set Fakes = CreateObject("Rubberduck.FakesProvider")
#Else
Set Assert = New Rubberduck.PermissiveAssertClass
Set Fakes = New Rubberduck.FakesProvider
#End If
End Sub

'@ModuleCleanup
Private Sub ModuleCleanup()
'this method runs once per module.
Set Assert = Nothing
Set Fakes = Nothing
End Sub

像这样配置,您可以轻松地在后期和早期绑定(bind)模式之间切换:

#Const LateBind = True '/False

如果您有多个测试模块,您可以定义一个名为 LateBindTests 的项目级预编译器常量,并同时切换所有 Rubberduck 测试模块的后期/早期绑定(bind)。您可以在“项目属性”中执行此操作(从“工具”菜单中,或在“代码资源管理器”中右键单击您的项目,然后选择“项目属性”) :

Project Properties VBIDE dialog

(旁注:帮助文件项目属性(没有人使用它,对吧?)被Rubberduck劫持,为项目分配并保留唯一的ID - 更改此值如果不立即保存并关闭将会破坏东西)

关于excel - 如何在没有 Rubberduck TestModules 的情况下交付 Excel VBA 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58770133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com