Перечисление Nested VB (VBA) - PullRequest
0 голосов
/ 13 мая 2011

Хорошо, ребята, я хотел бы получить эффект вложенного перечисления для легкой группировки некоторых константных строк. Что-то вроде псевдокода ниже:

Enum gKS
    Colby = "Hello"
    Hays = "World"
end Enum

Enum gMA
    Dodge = "Seven"
    Muscatine = "Ports"
end Enum

Enum gCountry
    north as gMA
    south as gKS
end Enum

Public USA as gCountry

Таким образом, код ниже должен вывести сообщение " Seven ":

sub dol()
    msgbox USA.north.Dodge
end sub

Я не хочу использовать типы или классы, потому что инициализация не требуется, так как все значения известны (константы, как я сказал).

Есть предложения?

ТНХ.

Ответы [ 3 ]

3 голосов
/ 13 мая 2011

Классы - способ пойти на это. Перечисления - это просто длинные значения, где требуется ограниченный выбор. Это обеспечит максимальную гибкость при работе с вашими объектами, если вам нужны эти объекты для выполнения других функций / подпрограмм.

Вот простой макет:

gСтрана класса:

Public North As gMA
Public South As gKS

Private Sub Class_Initialize()
    Set North = New gMA
    Set South = New gKS
End Sub

gKS Класс:

Public Property Get Colby() As String
    Colby = "Hello"
End Property

Public Property Get Hays() As String
    Hays = "World"
End Property

класс gMA:

Public Property Get Dodge() As String
    Dodge = "Seven"
End Property

Public Property Get Muscatine() As String
    Muscatine = "Ports"
End Property

Тестирование:

Public Sub TestIt()

    Dim USA As New gCountry

    MsgBox USA.North.Dodge
End Sub
2 голосов
/ 13 мая 2011

Я не верю, что вы сможете делать встроенные перечисления так, как надеетесь, потому что перечисления считаются примитивами в CLR ( source ).Вы также можете попытаться встроить целые числа в целые.

Я понимаю, что вы сказали, что не хотите использовать классы, но в такой ситуации статические классы предназначены для заполнения в мире .NET.Это будет легко и произвольно доступно без инициализации и быстро при компиляции. Эта страница содержит дополнительную информацию о статических элементах, если вы с ними не знакомы.Вы должны быть в состоянии сделать все, что вам нужно, чтобы получить информацию, настроенную так, как вы хотите внутри этого класса, будь то несколько статических классов, хеш-таблица, многомерный массив или что-то еще.

1 голос
/ 13 мая 2011

THX

Итак. Я решил решить эту проблему, используя типы:

    Public Type fCAOCC
        itRGI As String
        ...
    End Type
    Public Type fCAOBF
        itRGI As String
        ibEnviar As String
        ...
    End Type
    Public Type gTELAS
        CAOBF As fCAOBF
        CAOCC As fCAOCC
        ...
    End Type

    Public CSI As gTELAS

    Sub iniGLOBALS()
        CSI.CAOBF.itRGI = "DIVNRRGILIG"
        CSI.CAOBF.ibEnviar = "DUMMYNAME1"
        CSI.CAOCC.itRGI = "Hello"
...
    End Sub

И это готово для последующего использования в коде ...

суа

...