2012-02-07 14 views
12

कैसे डालें I अपना खुद का डेटा प्रकार परिभाषित करने और इसे एक शब्दकोश के रूप में एक शब्दकोश में डालने का प्रयास कर रहा हूं। वीबीए शिकायत करता है कि यह मेरे डेटा प्रकार को स्वीकार नहीं करता है। इस काम को कैसे प्राप्त करें के बारे में कोई विचार?उपयोगकर्ता परिभाषित डेटाटाइप को एक शब्दकोश में

केवल उपयोगकर्ता-निर्धारित प्रकार सार्वजनिक वस्तु मॉड्यूल में परिभाषित करने के लिए या एक प्रकार से मजबूर किया जा सकता है या पारित कर दिया देर से बाध्य मॉड्यूल के लिए:

Option Explicit 

Public Type Translation 
    german As String 
    french As String 
    italian As String 
End Type 

Private resource As Object 

Public Sub addTranslation(key As String, g As String, f As String, i As String) 
    Dim trx As Translation 
    trx.german = g 
    trx.french = f 
    trx.italian = i 

    resource.add key, trx '<== here VBA is complaining 
End Sub 

Public Sub initResource() 
    If resource Is Nothing Then Set resource = CreateObject("scripting.dictionary") 
End Sub 

यह त्रुटि messge है।

+0

संदेश क्या है? – BNL

+0

सार्वजनिक ऑब्जेक्ट मॉड्यूल में परिभाषित केवल उपयोगकर्ता-परिभाषित प्रकारों को एक संस्करण से या उसके बाद या देर से बाध्य मॉड्यूल में पारित किया जा सकता है। –

+0

यदि आप "संसाधन जोड़ें" trx.french "में लाइन बदलते हैं तो यह संकलित होगा, लेकिन मैं नहीं बता सकता कि आपका लक्ष्य क्या है। क्या "bla" = "add" है? –

उत्तर

11

के बाद कुछ और मैं इस सवाल का जवाब मिल गया खुदाई:

आप संग्रह के शब्दकोश में एक उपयोगकर्ता परिभाषित डेटा प्रकार रखना चाहते हैं, तो आप वर्ग के रूप में यह परिभाषित करने के लिए किया है। आप एक नया वर्ग मॉड्यूल जोड़ने और सिर्फ इस कोड को जोड़कर ऐसा कर सकते हैं: मैं कर सकते हैं

Private resource As Object 

Public Sub addTranslation(k As String, g As String, f As String, i As String) 
    Dim trx As trans 
    Set trx = New trans 
    trx.german = g 
    trx.french = f 
    trx.italian = i 

    resource.Add k, trx 
End Sub 

Public Sub initTranslations() 
    If resource Is Nothing Then Set resource = CreateObject("scripting.dictionary") 
End Sub 

अब: जब से मैं वर्ग मॉड्यूल ट्रांस नामित

Public german As String 
Public french As String 
Public italian As String 

, मेरे जिसके परिणामस्वरूप कोड इस तरह दिखता है गतिशील रूप से अनुवाद जोड़ें।

+1

धन्यवाद। यह बहुत गूंगा है, और उपयोगकर्ता परिभाषित प्रकार/वर्ग के लौटने वाले सरणी पर भी लागू होता है ... – enderland

+4

मैं वीबीए से दूर कदम रखता हूं, मैं इसे हमेशा के लिए कसम खाता हूं। मैं वापस आना, डबलिंग। मैं खुद को भूल जाता हूं और वापस आ जाता हूं .... जब तक निराशा मुझ पर न हो जाती है ... इसके साथ लेना दूसरी बार बेवकूफ़ बनने की शर्म की बात है। संक्षिप्त प्रश्नोत्तर ए। – colemand77

संबंधित मुद्दे