如何精简MS-Access 2007/2010中重复颜色枚举的代码量?
解决MS Access 2007/2010中重复颜色枚举的问题
你不需要定义9个完全相同的枚举,VBA里可以通过以下方式彻底消除重复代码,同时保留IntelliSense的颜色选项提示:
方案1:使用单一公共枚举(最推荐)
直接定义一个通用的颜色枚举,所有需要颜色参数的函数都使用这个枚举类型。这样既减少了重复代码,IntelliSense也能正常显示所有具体颜色选项。
修改后的代码如下:
' 只需要定义一次的公共颜色枚举 Public Enum lngColor Black = 0 Maroon = 128 Green = 32768 Olive = 32896 Navy = 8388608 Purple = 8388736 Teal = 8421376 Gray = 8421504 Silver = 12632256 Red = 255 Lime = 65280 Yellow = 65535 Blue = 16711680 Fuchsia = 16776960 White = 16777215 End Enum ' 函数参数统一使用lngColor类型 Function WhatEver(ByVal lngXColor1 As lngColor, ByVal lngXColor2 As lngColor) ' 执行你的逻辑代码 End Function
调用这个函数时,输入参数后IntelliSense会自动弹出所有颜色选项,和之前的多枚举效果完全一致,但你只需要维护这一份枚举定义。
如果担心多个颜色参数的语义混淆(比如一个是前景色、一个是背景色),可以通过参数名明确区分,比如:
Function WhatEver(ByVal lngForegroundColor As lngColor, ByVal lngBackgroundColor As lngColor) ' 执行你的逻辑代码 End Function
方案2:用常量模块替代枚举(备选)
如果你不想用枚举,也可以把颜色值定义在公共模块的常量里,参数使用Long类型,不过这种方式IntelliSense不会自动提示颜色选项,需要手动输入常量名:
' 公共模块中定义颜色常量 Public Const clrBlack = 0 Public Const clrMaroon = 128 Public Const clrGreen = 32768 ' ... 其他颜色常量 Function WhatEver(ByVal lngXColor1 As Long, ByVal lngXColor2 As Long) ' 执行你的逻辑代码 End Function
这种方式也能减少重复,但失去了枚举的类型校验和IntelliSense提示,所以优先推荐方案1。
注意:VBA不支持枚举的嵌套或继承,你之前尝试的嵌套枚举方式本身就无法实现预期的IntelliSense效果,所以单一枚举是最直接有效的解决办法。
内容的提问来源于stack exchange,提问作者cdveal
相关产品推荐
相关产品推荐

