【问题标题】:Array in an Enumeration枚举中的数组
【发布时间】:2014-10-16 05:07:40
【问题描述】:

我想知道是否可以进行动态枚举。

说明:我有一个功能可以在 ms 访问中将错误添加到错误日志中。我的 Enum 变量中的类别都在一个表中。如果我使用如下所示的函数和枚举,它就可以正常工作。但问题是,类别可能会随着时间而改变。

Enum category
    Category1 = 1
    Category2 = 2
    etc...    = n
End Enum

Public Function AddError(Current_order_ID As Long, Optional Error_Category As category)
'Add the error to the log
End Function

我注意到使用 DLookups 和记录集,实际上所有的东西通常都不起作用。编译时,它会抛出“枚举内部无效”。咨询 MSDN 为我提供了以下信息:您试图将字符串或其他一些无效类型指定为 Enum 成员的值。用于指定 Enum 成员的常量表达式必须计算为 Long 类型或其他 Enum 类型。

这告诉我枚举只能容纳长类型,因此也可以容纳数字,还可以容纳其他枚举类型。

我在寻找什么: 是否有一些解决方法或方法来循环记录集或查询并将值传递给数组,然后将这些值动态分配给枚举。或者也许可以通过更改源代码/vba 文本本身来完成?

注意:我知道有很多其他方法可以将我的错误添加到日志中并且我可以这样做,但我只是想知道这是否可能做。

我期待您的反应。

【问题讨论】:

  • 你能输入产生错误的实际代码行吗?您给出的代码片段是可以的。这将有助于查看实际的问题陈述。
  • 上面的代码没有产生任何错误,如上所述,它工作得很好。我想我无法正确解释,但我正在寻找的是一种根据表中的值更改枚举中类别的方法,如果可能的话。
  • @JenZzz 我只了解您帖子的第一部分。因此,您正在为错误类型传递一个 Enum。您所说的类别可能会改变是什么意思?分配给枚举的数字?

标签: ms-access enums vba ms-access-2007


【解决方案1】:

Recordset 循环遍历包含Enum 类型的表。基本上这是编辑模块 VBA 代码。

Public Function CreateEnum()
    Dim db As Database
    Dim rs As Recordset

    Set db = CurrentDb
    Set rs = db.OpenRecordset("MYENUMS", dbOpenSnapshot)

    Dim m As Module
    Dim s As String
    Set m = Modules("myEnumsModule")

    s = "Option Compare Database"
    s = s & vbNewLine & "Option Explicit"
    s = s & vbNewLine
    s = s & vbNewLine & "Public Enum MyEnums"
    With rs
        Do Until .EOF
            s = s & vbNewLine & vbTab & .Fields("MYENUM") & " = " & rs.Fields("MYENUM_ID")
            .MoveNext
        Loop
    End With
    s = s & vbNewLine & "End Enum"

    Call m.DeleteLines(1, m.CountOfLines)
    Call m.AddFromString(s)
End Function

【讨论】:

  • 谢谢你,我不知道在 vba 中更改模块源代码的可能性。尽管 z 的答案也很有帮助,但这个答案为我提供了我正在寻找的答案!谢谢
【解决方案2】:

虽然Enum 类型无法在运行时更改,但该类型的变量实际上可以存储任何Long 值。

Enum category
    Category1 = 1
    Category2 = 2
End Enum


Sub error(err As category)
    Debug.Print err
End Sub

Sub test()
    Dim category3 As Long: category3 = 3
    Call error(category3) ' prints "3"
End Sub

但是不行,您不能在运行时声明或更新Enum,也不能将数组转换为Enum

【讨论】:

  • 感谢您的明确答复。虽然这不可能,但你的小例子给了我一些启发!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
相关资源
最近更新 更多