PDA

View Full Version : [VBA] Combobox tra excel e VB


richileruar
28-02-2009, 07:22
Ciao a tutti, un problema che per voi sarà banale, mentre per me è in questo momento irrisolvibile da solo.

devo, da un foglio di excel inserire una combo che si riempi con dei dati del foglio di excel che si presentano in colonna. e questo è il primo problema!!!

il secondo è che una volta che seleziono una voce della combo,mi restituisca solo alcuni valori in celle che gli dico io(sempre in colonne).

purtroppo ho bisogno della spiegazione passo passo perchè sono un neofita di VB e di macro.

spero di essermi spiegato bene grazie:muro:

MarcoGG
28-02-2009, 12:33
1. Rinominare Thread con [VBA] iniziale...

2. Primo quesito :
> Ad esempio :
ComboBox1.ListFillRange = "A1:A5"

;)

Per il resto spiega più precisamente cosa vuoi ottenere...

richileruar
28-02-2009, 14:49
ok ho capito, ma non so rinominare ll tread iniziale.

un volta creato l'elenco nella combobox, vorrei che ad ogni voce della combobox selezionata, in alcune celle venissero cambiati dei valori. naturalmente dovrò indicargli io quali valori mettere e dove metterli!!!

è possibile??

grazie ciao

MarcoGG
28-02-2009, 15:08
Semplice. Basta usare l'evento Change() della ComboBox :
Private Sub ComboBox1_Change()
Prendi il valore selezionato ( ComboBox1.Text ) e ci fai quello che vuoi...

richileruar
28-02-2009, 19:58
perfetto grazie, ho scritto questo codice ma non so come indicargli le celle in cui deve andare a scrivere il valore

esempio del codice che stò facendo


ComboBox1.ListFillRange = "AF1:AF5"
If ComboBox1.Text = "ARCA" Then
cella AG6 = D2 "cioè la cella d2 deve diventare uguale ad AG6"
End If

grazie ciao

MarcoGG
01-03-2009, 11:40
ComboBox1.ListFillRange = "AF1:AF5"
If ComboBox1.Text = "ARCA" Then
cella AG6 = D2
End If


No, non ci siamo.
Quel codice non può stare tutto assieme nella stessa routine.

ComboBox1.ListFillRange = "AF1:AF5" va messo da solo ( evento a scelta : apertura del WorkBook, selezione del Foglio, Pulsante, ecc... )

Poi sotto il Change della Combo...:

Private Sub ComboBox1_Change()

If ComboBox1.Text = "ARCA" Then
Range("AG6").FormulaR1C1 = Range("D2").Text
End If

End Sub

;)

richileruar
01-03-2009, 19:35
sono riuscito....

mi manca solo una cosa, come faccio ogni volta che apro il file excel a far tornare una voce della combo sempre uguale.
cioè tra cinque valori ipotizziamo (rete-campo-linee- selezionare la voce),

io vorrei che ad ogni apertura del file excel tornasse sempre la voce "selezionare la voce"

è fattibile??

grazie

MarcoGG
02-03-2009, 08:17
Se mantieni la Combo in modalità "DropDownCombo" ( proprietà "Style" ), te la cavi con 2 righe di codice. Esempio ( nel Modulo "ThisWorkbook" ) :

Private Sub Workbook_Open()

Sheets("Foglio1").ComboBox1.ListFillRange = "Foglio1!A1:A5"
Sheets("Foglio1").ComboBox1.Text = "Selezionare la voce"

End Sub

Se invece volessi impedire all'utente di scrivere liberamente nella Combo ( Style = DropDownList ), dovrai usare un ciclo sulla colonna e poi aggiungere la voce "Selezionare la voce", oppure mantenere il ListFillRange ed aggiungere "Selezionare la voce" direttamente nel Foglio Excel... ;)

richileruar
04-03-2009, 22:47
GRZIE HO PROVATO CON LE DUE RIGHE DI CODICE MA MI RESTITUISCE QUESTO ERRORE

ERRORE DI RUNTIME 9 INDICE NON INCLUSO NELL'INTERVALLO.....

CIOè????

MarcoGG
05-03-2009, 08:37
Quelle 2 righe sono corrette ( crea un file Excel di prova con una Combo, e mettici quel codice, vedrai che non solleva mai eccezioni ).

Il problema sta nel codice che hai legato al .Change della Combo, e forse ad altri eventi... Evidentemente cerca di impostare una cella con un indice non valido...
Cmq, ti ripeto che per usare quelle 2 righe la Combo deve tassativamente avere la proprietà Style = fmStyleDropDownCombo.