Range combobox senza celle vuote
Hai un problema con Excel? 
Range combobox senza celle vuote
di Claudio (utente non iscritto) data: 29/03/2017 13:21:37
Eccomi qui con un altro problemino. Ho un form con varie combobox. Come posso far popolare le combobox da un dato foglio definendo un range e da questo range far prendere solo le celle con contenuto?
Attualmente riempio le combobox con il codice di sotto, ma il range è fisso e contiene sicuramente dati. Se io allargassi il range (per esempio I20:I30), ora come ora nella combobox mi apparirebbero 6 righe vuote, e io non vorrei ciò, ma questo range così grande mi permetterebbe di aggiungere dei dati al Foglio 1 senza essere costretto a modificare il codice della macro. Mi sono spiegato?
Grazie
Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").Value |
di Luca73 data: 29/03/2017 13:55:51
Forse basta
Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").ColumnDifferences( _
Comparison:=Worksheets("Foglio1").Range("XYY"))
Dove Range("XYY") è un range Vuoto
Ciao
Luca
di Claudio (utente non iscritto) data: 29/03/2017 14:51:00
Quindi range("XYY") potrebbe essere range("I25:I30")?
Grazie
di Luca73 data: 29/03/2017 14:57:02
una sola cella che non contiene nulla il comanda prende dal range originario "I20:I24" solo quelle celle che sono diverse da Comparison che vale ("Foglio1").Range("XYY")
Pertanto ti basta indicare una cella nella stessa colonna che sia vuota (potrebbe essere una molto in basso tippo "I10000")
Ciao
Luca
di Luca73 data: 29/03/2017 15:11:23
Se tutte le celle che consideri (non vuote) hanno all'interno una formula o una costante puoi usare anche
Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").SpecialCells(xlCellTypeFormulas).Value
oppure
Me.ComboBox1.List = Worksheets("Foglio1").Range("I20:I24").SpecialCells(xlCellTypeConstants).Value
|
di Albatros54 data: 29/03/2017 15:16:03
Scusate, se vuoi aggiungere dei dati , senza inserire delle righe vuote, mi riferisco al range del foglio dove inserisci i dati, quindi c'è continuita delle celle contenente dei dati, prova il codice sotto, senza toglie niente a Luca73(che saluto)
ciao
albatros54
Public Sub l()
UR = Sheets("Foglio1").Range("I" & Rows.Count).End(xlUp).Row
ComboBox1.ListFillRange = ("Foglio1!I1:I" & UR)
End Sub |
di Claudio (utente non iscritto) data: 29/03/2017 15:24:13
Grazie Luca ed Albatros, il problema fondamentale è che il range deve essere al massimo I3:I30, perché nelle celle che seguono ci sono altri dati. Grazie
di Albatros54 data: 29/03/2017 17:45:50
prova la routine sotto.
(Cells(i, 1).Value) <<< il numero 1 si riferisce alla colonna A , adattala al tuo scopo
Public Sub f()
ComboBox1.Clear
i = 3
Do While i < 30
i = i + 1
If IsEmpty(Cells(i, 1).Value) = False Then
ComboBox1.AddItem Cells(i, 1).Value
End If
Loop
End Sub
|
di Oscar (utente non iscritto) data: 29/03/2017 18:50:23
Ciao a tutti
Prova anche lìesempio che ti ho allegato
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 10
If Cells(i, 1) <> Empty Then
ComboBox1.AddItem (Cells(i, 1).Value)
End If
Next
End Sub |
di Claudio (utente non iscritto) data: 29/03/2017 18:56:09
Vi ringrazio per le risposte. Ma devo dire al programma di andare a cercare i dati nel Foglio1, quindi come glielo dico?
Grazie
di Claudio (utente non iscritto) data: 29/03/2017 19:06:03
Mi sono reso conto di avervi fatto una domanda stupida.
Ho risolto così.
Grazie a tutti
Public Sub f()
ComboBox1.Clear
With Foglio1
Dim i As Integer
For i = 2 To 10
If Cells(i, 9) <> Empty Then
ComboBox1.AddItem (Cells(i, 9).Value)
End If
Next
End With
End Sub
|
Vuoi Approfondire?