2012-02-07 12 views
12

Estoy tratando de definir mi propio tipo de datos y ponerlo en un diccionario como un valor. VBA se queja de que no acepta mi tipo de datos. ¿Alguna idea sobre cómo hacer que esto funcione?Cómo poner el tipo de datos definido por el usuario en un diccionario

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 

Este es el messge error:

tipos Sólo definidos por el usuario definidos en módulos de objeto públicos pueden ser obligados a o desde una variante o pasan a módulos de enlace en tiempo.

+0

¿Cuál es el mensaje? – BNL

+0

Solo los tipos definidos por el usuario definidos en los módulos de objetos públicos se pueden forzar desde o hacia una variante o pasar a los módulos con límite de tiempo. –

+0

Si cambia la línea a "resource.Add key, trx.french", se compilará, pero no puedo decir cuál es su objetivo. ¿"Bla" = "agregar"? –

Respuesta

11

Después de un poco más de la excavación he encontrado esta respuesta:

Si usted quiere poner un tipo definido por el usuario en un diccionario de datos de la colección, tiene que definir como clase. Puede hacerlo añadiendo un nuevo módulo de clase y sólo añadir este código:

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

Desde puse el nombre de módulo de clase trans, mi código resultante es la siguiente:

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 

Ahora puede agregar dinámicamente las traducciones

+1

Gracias. Esto es tan tonto, y se aplica a las matrices de devolución de un tipo/clase definida por el usuario también ... – enderland

+4

Me alejo de VBA, lo juro por siempre. Yo regreso, chapoteando. Me olvido de mí mismo y vuelvo a entrar ... hasta que la decepción me inunda nuevamente ... Llevar con él es la vergüenza de ser engañado por segunda vez. Conciso Q & A. – colemand77

Cuestiones relacionadas