gpt4 book ai didi

excel - VBA:可以在运行时配置一组 "constants"吗?

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

在编写用于处理电子表格的宏时,我喜欢在模块顶部设置常量,对应于我必须使用的各种列号。我最近遇到一个情况,我需要在两个略有不同的文件布局上执行完全相同的任务。我的解决方案是将常量转换为变量,并调用配置子来根据要处理的文件来设置它们。我对该解决方案唯一不喜欢的是,不变的内容,以及防止粗心的用户(或开发人员(!))对代码进行调整的内容,现在都在变量中。

有什么方法可以使这些配置的值在主子中不可更改吗?

原始风格:

Const iColUser = 1
Const iColColor = 2
Const iColPet = 3

Sub Main()
iColUser = 3 '<--This line will prevent sub from running.

新风格:

Dim iColUser As Integer
Dim iColColor As Integer
Dim iColPet As Integer

Sub Config()
Select Case SpreadsheetType
Case a
iColUser = 1
iColColor = 2
iColPet = 3
Case b
iColUser = 3
iColColor = 2
iColPet = 1
End Select
End Sub
Sub Main()
iColUser = 2 '<--This line will run, and cause major damage.

最佳答案

封装它们

添加一个类模块,并对它们进行抽象抽象列编号逻辑,exose列的Property Get访问器,然后使用Get和另一个属性Let 访问器用于“模式”,它决定属性返回的值。

Public Enum SpreadsheetType
A
B
End Enum

Private columnMode As SpreadsheetType

Public Property Get Mode() As SpreadsheetType
Mode = columnMode
End Property

Public Property Let Mode(ByVal value As SpreadsheetType)
columnMode = value
End Property

Public Property Get UserColumn() As Long
Select Case Mode
Case A
UserColumn = 1
Case B
UserColumn = 3
End Select
End Property

Public Property Get ColorColumn() As Long
Select Case Mode
Case A
ColorColumn = 2
Case B
ColorColumn = 2
End Select
End Property

Public Property Get PetColumn() As Long
Select Case Mode
Case A
PetColumn = 3
Case B
PetColumn = 1
End Select
End Property

现在要使用它,您需要该类的实例。假设您将其称为 Class1(天哪,不要这样做!),使用它时将如下所示:

Sub Test()

Dim sheetColumns As New Class1

sheetColumns.Mode = A
Debug.Print sheetColumns.UserColumn 'outputs 1

sheetColumns.Mode = B
Debug.Print sheetColumns.UserColumn 'outputs 3

End Sub

使用此对象的代码只能读取值,而不能写入它们 - 除非您为该对象实现了Property Let访问器可变值。

关于excel - VBA:可以在运行时配置一组 "constants"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649555/

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