Gestione dei set di dati di configurazione per un programma Excel / VBA

2

Ho due versioni di un "Excel-Tool", cioè un foglio di calcolo con un sacco di codice vba. Diciamo, questo strumento è utilizzato per monitorare due strutture. Entrambe le strutture differiscono per aspetti minori.

Questo significa che ho numeri magici in entrambe le versioni per impostare gli intervalli corretti per ogni funzione nei fogli di calcolo.

Ho refactored il vba per isolare i numeri magici. Ho separato la logica aziendale in un modulo e i numeri magici per intervalli in un secondo modulo. Ora posso riutilizzare il modulo logico in entrambe le versioni e devo solo mantenere un modulo logico e non devo tenere sincronizzati due file. Questo è un grande miglioramento.

Ma sembra che non ho finito. Voglio avere solo un masterfile (excel + moduli vba importati) da distribuire e un qualche tipo di file di configurazione per memorizzare i numeri magici per la struttura attuale.

Qualcuno ha esperienza con questo concetto? Esiste un primer o anche una soluzione pronta per la configurazione di un programma vba?

2015-04-29 Modifica:

Non volevo inserire il codice in primo luogo, ma permettimi di chiarire attraverso i numeri.

Diciamo che dobbiamo strutture, ognuna con un numero di macchine. L'intera attività riguarda la generazione di grafici delle prestazioni della struttura. I dati non elaborati per ogni struttura (e ogni macchina) hanno lo stesso formato, ma il numero di macchine varia tra le strutture.

Ho una funzione vba per creare grafici standardizzati. Questa funzione viene chiamata per ogni macchina con una serie di intervalli, che punta ai dati non elaborati.

Per facilitiy 1 potrebbe essere:

Set Inputdata(0) = Sheet1.Ranges("A2:A20")
Set Inputdata(1) = Sheet1.Ranges("B2:B20")
Set newChart = ChartCreator("Facility 1", Inputdata)

E per l'impianto 2:

Set Inputdata(0) = Sheet1.Ranges("A2:A25")
Set Inputdata(1) = Sheet1.Ranges("B2:B25")
Set Inputdata(2) = Sheet1.Ranges("C2:C25")
Set newChart = ChartCreator("Facility 2", Inputdata)

Ho separato la logica, il ChartCreator, ma ho ancora quei numeri. Poiché i dati di Sheet1 sono generati da una query SQL, qualcosa di simile sta succedendo lì.

Se usassi il suggerimento di James, avrei un altro foglio con la configurazione. Devo ancora mantenere due file excel con differenze in un foglio di configurazione.

Ma quello che voglio è avere un foglio Excel che possa passare ad entrambe le strutture e aggiungere qualcosa come un file ini per archiviare i dati specifici. Quindi posso semplicemente mantenere una copia generica del file excel per me per aggiungere nuove cose o effettuare correzioni di bug e quindi posso solo inviare una nuova versione di questo in entrambe le strutture e non pensare alla configurazione.

    
posta Oliver 28.04.2015 - 14:44
fonte

2 risposte

1

L'approccio giusto per questo è avere le informazioni di configurazione in un foglio di lavoro - quindi può essere modificato anche da persone che non vogliono toccare VBA.

L'architettura deve avere un foglio di lavoro abilitato per le macro con un foglio chiamato, ad esempio, Configurazione, con ogni pezzo di configurazione in una cella che è un intervallo denominato a cui la macro può fare riferimento. Dovresti avere anche descrizioni e aiuto in questo foglio di lavoro.

    
risposta data 28.04.2015 - 19:46
fonte
0

Questo è stato chiesto molto tempo fa, ma penso che ci sia un approccio migliore di quello già suggerito, quindi eccolo qui.

Consiglierei di avere il file master come suggerito, indipendente dalla struttura (senza particolari dati di configurazione su di esso) e caricare la configurazione della struttura da un file xml che sarà specifico per ognuno e che tu o il le persone lì potevano manipolare / personalizzare / modificare (essendo xml molto leggibile).

Dai un'occhiata a questo per idee su come analizzare l'xml dati.

Quindi, ad esempio, puoi memorizzare dati per popolare le tue variabili:

<machine facility="Facility 1" name="Machine1">
    <labels>A2:A20</labels>
    <data>B2:B20</data>
</machine>

Per popolarlo in questo modo (dopo averlo analizzato con gli approcci, troverai il seguente link):

Set Inputdata(0) = Sheet1.Ranges(machine1.labels)
Set Inputdata(1) = Sheet1.Ranges(machine1.data)
Set newChart = ChartCreator(machine1.facility, Inputdata)
    
risposta data 28.10.2016 - 02:53
fonte

Leggi altre domande sui tag