VBA массив типов буквальных - PullRequest
0 голосов
/ 23 декабря 2011

Я определил следующий тип:

Public Type settings
    key As String
    german As String
    french As String
End Type

Как выглядит правильный код для определения массива с ~ 100 литеральными записями?

В некотором роде:

Dim translations as Array() = {
   (key="send", german="Senden", french="Enregistrer"),
   (key="directory", german="Verzeichnis", french="Liste"),
   ...

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Нет хорошего синтаксиса для этого в VBA. Если вам действительно нужно инициализировать массив определенного пользователем типа, вы можете использовать несколько вспомогательных функций, чтобы сделать это следующим образом:

Public Type settings
    key As String
    german As String
    french As String
End Type

Private Function NewTranslation(key As String, german As String, french As String) As settings
    NewTranslation.key = key
    NewTranslation.german = german
    NewTranslation.french = french
End Function

Private Sub AddTranslation(translations() As settings, value As settings)
    Dim u As Integer
    u = -1
    On Error Resume Next ' ubound raises an error if the array is not dimensioned yet
    u = UBound(translations)
    On Error GoTo 0
    ReDim Preserve translations(0 To u + 1) As settings
    translations(u + 1) = value
End Sub

Public Sub Main()
    Dim translations() As settings
    AddTranslation translations, NewTranslation("send", "Senden", "Enregister")
    AddTranslation translations, NewTranslation("directory", "Verzeichnis", "Liste")
    ' and so on
End Sub

Лучшим способом решения этой конкретной проблемы будет объект Collection (карта), использующий код языка и исходный текст в качестве ключа:

Private translations As New Collection

Public Sub Main()
    With translations
        .Add "Senden", "de:send"
        .Add "Enregister", "fr:send"
        .Add "Verzeichnis", "de:directory"
        .Add "Liste", "fr:directory"
    End With

    MsgBox GetTranslation("de", "send")
End Sub

Public Function GetTranslation(language As String, s As String)
    GetTranslation = s ' default to original text if no translation is available
    On Error Resume Next
    GetTranslation = translations(language + ":" + s)
End Function
0 голосов
/ 23 декабря 2011

Это не прямой ответ на ваш вопрос:
Способ обработки текста перевода заключается в том, чтобы сохранить его на листе Excel (который обычно скрыт внутри надстройки XLA), а затем прочитать его (или просто столбец, необходимый для текущего языка) в вариант, содержащий массив.
Гораздо проще поддерживать и расширять (добавлять новые языки или слова), если вы делаете это таким образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...