2011-12-23 25 views
0

予定義的以下類型:的類型字面VBA陣列

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"), 
    ... 

回答

0

在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 

一個更好的方式做這方面的問題將是一個集合(圖)對象使用語言代碼和原始文本作爲關鍵字:

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

這不是直接回答你的問題:
我處理翻譯的文本是保持它在一個Excel工作表(通常是隱藏的XLA插件內)的方式,然後將其讀取(或只是當前語言所需的列)爲包含數組的變體。
如果你這樣做,維護和擴展(添加新的語言或文字)要容易得多。

+0

好的,我明白了。這對我的Excel加載項來說不會有問題。但我有一個幾乎相同的Word插件。我怎樣才能包含Word插件的Excel表單? – BetaRide

+0

我對Word Addins一無所知,所以不知道最好的解決方案 - 也許你將不得不復制Word表格中的信息? –