VBA - Array e listbox

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Ciao,
avrei bisogno di crearmi una sorta di tabella interna al Default.ivb con una lista di macchine con relativa descrizione, per poi richiamare da combolist e usare il numero della macchina. Questo serve perchè noi progettisti conosciamo le macchine per descrizione mentre gli altri per numero. Devo quindi creare una tabella in cui nella colonna 1 ci sia scritto "macchina 1" e nella colonna 2 "macchina pippo" in maniera tale che visivamente nella listbox io legga "macchina pippo" ma vada a scrivere "macchina 1".
Ho bisogno di una tabella esterna perchè ho più funzioni in cui richiamare il valore "macchina 1".
Non voglio usare applicativi esterni a meno che non ne sia strettamente costretto.

Qualcuno mi sa aiutare?
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2024
Regione: Veneto

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Fretta non ne ho, nel senso che attualmente ho fatto un accrocchio.
Sono grossomodo nella stessa situazione del primo link, la tabella, in qualche modo da help di VBA l'ho fatta, e mi tocca riproporla in 4 (per adesso, in futuro forse più) occasioni.
Vorrei appunto in futuro andare a modificare un solo array, per problemi di gestione/lettura di dati.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2024
Regione: Veneto
Se ho capito il problema il mio approccio sarebbe un file esterno comune da cui attingono i vari programmi/macro che farai... In che senso devi "riproporla"? Poi una volta caricata in memoria in un array il problema diventa come fai il programma e quella è un'altra faccenda.
L'esempio postato usava excel, la stessa cosa funziona con un file .txt...
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Se ho capito il problema il mio approccio sarebbe un file esterno comune da cui attingono i vari programmi/macro che farai... In che senso devi "riproporla"? Poi una volta caricata in memoria in un array il problema diventa come fai il programma e quella è un'altra faccenda.
L'esempio postato usava excel, la stessa cosa funziona con un file .txt...
Non vorrei ricorrere ad un file esterno, più che altro per avere un unico file da smanettare in futuro, magari a far così appesantisco notevolmente il tutto?
In buona sostanza ho 4 combobox con menù a tendina che possono assumere 4 valori differenti: da incapace ho creato 4 combobox con all'interno di ogni funziono combo una lista.
Volevo migliorare il tutto.
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2024
Regione: Veneto
Come detto tutto dipende da come hai fatto il programma... Puoi anche avere un unico array compilato all'interno del programma una volta e poi usare sempre quello per riempire i tuoi listbox ogni volta, starà a te se usare l'array come variabile globale o inventarti altri artifizi più eleganti...
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Come detto tutto dipende da come hai fatto il programma... Puoi anche avere un unico array compilato all'interno del programma una volta e poi usare sempre quello per riempire i tuoi listbox ogni volta, starà a te se usare l'array come variabile globale o inventarti altri artifizi più eleganti...
Vorrei proprio fare questo!
... ma non sono capace...:)
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2024
Regione: Veneto
Spero tu sia più abile a pagare birre :p
Codice per VBA

Rich (BB code):
'Questa la metti nei vari Form che contengono la combobox, adattando i nomi di combobox e form
Private Sub Userform_Initialize()
    Call CompilaComboBox(myForm.ComboBox1)
End Sub

' Questa è una sub generale che compila sempre nello stesso modo il parametro combobox che viene passato
' da mettere in un modulo
Public Sub CompilaComboBox(myCombo As ComboBox)
    myCombo.AddItem ("Tizio")
    myCombo.AddItem ("Caio")
    myCombo.AddItem ("Sempronio")
End Sub
 
Ultima modifica:

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Rich (BB code):
'Questa la metti nei vari Form che contengono la combobox, adattando i nomi di combobox e form
Private Sub Userform_Initialize()
    Call CompilaComboBox(myForm.ComboBox1)
End Sub
Rich (BB code):
Probabilmente mi mancava sto passaggio, metto su un modulo ad hoc l'array?
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2024
Regione: Veneto
La sub CompilaComboBox puoi metterla in un modulo qualsiasi, se faccio macro un po' elaborate di solito mi faccio un modulo apposito ma non è necessario; sarà disponibile in tutti i tuoi form/programmi (essendo public).
Invece la sub Userform_Initialize() è una sub "preimpostata" che va in esecuzione ogni volta il form che la contiene si avvia: quindi va copiata in ognuno dei tuoi form, e funzionerà solo per quel form specifico (essendo private).

Comunque:
a) non sono un programmatore e quindi posso sparare st..upidaggini.
b) la birra è per l'impegno e non per la qualità del supporto qualora rientrassimo nel caso a) ;)
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Purtroppo adesso sono a corto di tempo, appena sono un po' libero ci provo e poi ti dico come è andata!
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Riesumo, in quanto penso di avere qualche ora a disposizione qua e là.
Rinfrescando la memoria:

attualmente sono in questa situazione:
Codice:
ComboG1.AddItem "125", 1
ComboG1.List(1, 1) = "macchina 1"
ComboG1.AddItem "146", 2
ComboG1.List(2, 1) = "macchina 2"
ComboG1.AddItem "153", 3
ComboG1.List(3, 1) = "macchina 3"
ComboG1.AddItem "160", 4
ComboG1.List(4, 1) = "macchina 4"
ComboG1.AddItem "161", 5
ComboG1.List(5, 1) = "macchina 5"
ComboG1.AddItem "176", 6
ComboG1.List(6, 1) = "macchina 6"
ComboG1.AddItem "180", 7
ComboG1.List(7, 1) = "macchina 7"
ComboG1.AddItem "186", 8
ComboG1.List(8, 1) = "macchina 8"

Quindi: leggo "macchina ..." ma vado a popolare il valore numerico relativo nelle iprop; come si vede ho varie combobox "ComboG1" e così via.

Per fare un array (pubblico) dove leggere "macchina ..." e scrivere il relativo valore come faccio?

Per richiamarlo penso di aver capito, penso...
 

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2024
Regione: Veneto
Il codice postato inizialmente fa quello che chiedi:
- Crei i tuoi combobox ComboG1, ComboG2, ecc. ecc.;
- Chiami la Sub CompilaComboBox(myCombo) passando ComboG1, ComboG2 ecc come parametro;
- la sub CompilaComboBox(...) conterrà il codice necessario a compilare i ComboBox
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Il codice postato inizialmente fa quello che chiedi:
- Crei i tuoi combobox ComboG1, ComboG2, ecc. ecc.;
- Chiami la Sub CompilaComboBox(myCombo) passando ComboG1, ComboG2 ecc come parametro;
- la sub CompilaComboBox(...) conterrà il codice necessario a compilare i ComboBox


Scusami ma mi sono perso, allego piccolo esempio se riesci a darmi una "regolata"
 

Allegati

  • esempioexcel.zip
    23.8 KB · Views : 2

Catafratto

Utente Standard
Professione: Disegnatore/progettista
Software: Inventor 2024
Regione: Veneto
Richiama la compilazione da UserForm_Activate() e non da combobox_Click():

Codice:
Private Sub UserForm_Activate()
    Call CompilaComboBox(UserForm.ComboG1)
    Call CompilaComboBox(UserForm.ComboG2)
End Sub
 

reb_bl

Utente Standard
Professione: Far sì che gli altri abbiano qualcuno a cui rivolgere i propri insulti
Software: .
Regione: .
Richiama la compilazione da UserForm_Activate() e non da combobox_Click():

Codice:
Private Sub UserForm_Activate()
    Call CompilaComboBox(UserForm.ComboG1)
    Call CompilaComboBox(UserForm.ComboG2)
End Sub

Grazie, adesso ho capito!
 

Statistiche forum

Discussioni
58,632
Messaggi
499,983
Utenti registrati
104,425
Ultimo utente registrato
Robert25

Utenti online

Top