gpt4 book ai didi

vba - 带点运算符的常量 (VBA)

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

我想要一个常量 Material 目录,这样我就可以使用如下所示的代码:

Dim MyDensity, MySymbol
MyDensity = ALUMINUM.Density
MySymbol = ALUMINUM.Symbol

显然铝的密度和符号预计不会改变,所以我希望这些是常数,但为了简单起见,我喜欢点符号。

我看到了一些选择,但我不喜欢它们。
  • 为每种 Material 的每个属性制作常量。这似乎是太多的常数,因为我可能有 20 种 Material ,每种 Material 都有 5 个属性。
    Const ALUMINUM_DENSITY As Float = 169.34
    Const ALUMINUM_SYMBOL As String = "AL"
  • 定义一个包含所有 Material 的枚举并创建返回属性的函数。密度是常数并不那么明显,因为它的值是由函数返回的。
    Public Enum Material
    MAT_ALUMINUM
    MAT_COPPER
    End Enum

    Public Function GetDensity(Mat As Material)
    Select Case Mat
    Case MAT_ALUMINUM
    GetDensity = 164.34
    End Select
    End Function

  • 似乎 Const Structs 或 Const Objects 无法解决这个问题,但也许我错了(它们甚至可能不被允许)。有没有更好的办法?

    最佳答案

    使 VBA 等效于“静态类”。常规模块可以有属性,没有什么说它们不能是只读的。我还将密度和符号包装在一个类型中:

    'Materials.bas

    Public Type Material
    Density As Double
    Symbol As String
    End Type

    Public Property Get Aluminum() As Material
    Dim output As Material
    output.Density = 169.34
    output.Symbol = "AL"
    Aluminum = output
    End Property

    Public Property Get Iron() As Material
    '... etc
    End Property

    这非常接近您想要的使用语义:
    Private Sub Example()
    Debug.Print Materials.Aluminum.Density
    Debug.Print Materials.Aluminum.Symbol
    End Sub

    如果您在同一个项目中,您甚至可以删除显式 Materials限定符(尽管我建议明确表示):
    Private Sub Example()
    Debug.Print Aluminum.Density
    Debug.Print Aluminum.Symbol
    End Sub

    关于vba - 带点运算符的常量 (VBA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53342482/

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