Domanda

Qual è il modo migliore per gestire i tipi definiti dall'utente comuni attraverso i moduli di VBA?

Io uso gli stessi tipi definiti dall'utente in diversi moduli. Ad esempio, ho spesso bisogno di rappresentare (x, y) punti, così finisco avere questa Type in diversi moduli:

Type XYpointType
    x As Double
    y As Double
End Type

passo argomenti di tipo XYpointType da e sottomarini e funzioni in differenti moduli.

Tuttavia, ho il sospetto che questo è un buon sistema per gestire i tipi definiti dall'utente. L'esatto stesso codice definizione Type finisce in molti moduli differenti.

In alternativa, ho potuto avere questa dichiarazione Type in un singolo modulo, "tipi" centrali, e tutti gli altri moduli che necessitano di questo tipo particolare dovrebbe fare riferimento al modulo tipi. Il rovescio della medaglia è che ogni modulo perde la sua "modularità" nel senso che deve essere accompagnato byt il modulo "tipi" ovunque vada.

Qualche suggerimento?

È stato utile?

Soluzione

Questo è interessante, perché non ho mai saputo che si potrebbe avere due moduli entrambi dichiarando un tipo di pubblico con lo stesso nome. Ora che so, sto inorridito.

Quindi, prima, Eric Torri è corretto che si desidera mettere la vostra dichiarazione di tipo in un solo modulo. Altri moduli che utilizzano questo tipo dipenderanno quel modulo sia disponibile, ma questo è solo qualcosa che viene fornito con la modularizzazione. La necessità di gestire le dipendenze tra i moduli è comune a tutto lo sviluppo del software. E 'un peccato che all'interno di un unico progetto VBA (come il tipo che ci si trova in una singola cartella di lavoro di Excel) l'unica opzione per la gestione delle dipendenze dei moduli è manuale. (In VBA, "moduli" sono davvero "file di codice sorgente". Altre lingue / ambienti hanno diversi sistemi di confezionamento di livello superiore.)

Ora per la parte orribile. Se lo fai tipi di dichiarazione con lo stesso nome in diversi moduli, si sta impostando te stesso per problemi. Consideriamo due moduli VBA:

'Module1

Public Type typ
    x As String
End Type

Public Sub useTyp()
    Dim t As typ
    t.x = 42

    Debug.Print t.x + t.x
End Sub

e

'Module2

Public Type typ
    x As Long
End Type

Public Sub useTyp()
    Dim t As typ
    t.x = 42

    Debug.Print t.x + t.x
End Sub

nello stesso progetto, il codice "compilazione" (almeno in Excel VBA). Ma sottomarini i due 'useTyp' restituiscono valori diversi. Peggio ancora, se si rimuove una delle dichiarazioni di tipo da uno dei moduli, hai improvvisamente cambiato il comportamento della routine 'useTyp' nello stesso modulo! Questo tipo di ambiguità non è mai desiderabile.

Cosa sta succedendo è che VBA è in realtà la creazione di due tipi diversi, 'Module1.typ', e 'Module2.typ'. Quando sei nello stesso modulo e non si qualificano il nome del tipo, VBA trova in silenzio il tipo di "giusto" e l'usa.

Sono un po 'sorpreso di sentire che si sta passando intorno istanze di una 'XYpointType' a moduli che hanno una dichiarazione diversa 'XYpointType'. Non è così importante, ma potresti pubblicare il codice? Sono interessato a cose nitpicky come questo ...

Altri suggerimenti

Usa il secondo metodo. Il punto è di fare un Tipi blob riutilizzabile. Per essere riutilizzabile, esso deve essere separato. Quindi, sì, ogni modulo che utilizza tali tipi deve fare riferimento a quel blob. Ma la stessa cosa si può dire sui moduli che chiedono le une nelle altre, forme che richiedono i moduli che chiamano, et c.

È anche possibile creare una classe per i vostri XYPoints. Questo vi permetterà di avere funzioni personalizzate, e metodi che si dovrebbe bisogno di andare su questa strada. Tipi sono molto limitato rispetto alle classi.

Ecco una buona risorsa per iniziare: http://www.cpearson.com /excel/Classes.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top