Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Aurelio,
Per rendere il codice più robusto e aumentare il numero di elementi visualizzati nel ComboBox, prova la seguente modifica del mio codice:
- Aggiungi un ComboBox (ComboBox1) al foglio Comuni Italiani
- Fai clic dx sulla linguetta del foglio di interesse
- Seleziona l'opzione Visualizza Codicedal****menu contestuale risultante
- Incolla il seguente codice:
'========>>
Option Explicit
'-------->>
Private Sub ComboBox1_Change()
Call Update_Combo
End Sub
'-------->>
Private Sub ComboBox1_DropButtonClick()
Call Update_Combo
End Sub
'<<========
- Alt+IMper inserire un nuovo modulo di codice
- Nel nuovo modulo vuoto, incolla il seguente codice:
'========>>
Option Explicit
Option Compare Text
'-------->>
Public Sub Update_Combo()
Dim WB As Workbook
Dim SH As Worksheet
Dim srcRng As Range, destRng As Range
Dim arrIn As Variant, arrOut() As Variant
Dim OleObj As OLEObject
Dim CBox As ComboBox
Dim sCriterio As String
Dim i As Long, iCtr As Long
Dim LRow As Long
Const sFoglio As String = "Comuni Italiani"
Const sCella_Convalida_Dati As String = "D2"
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglio)
With SH
LRow = LastRow(SH, .Columns("A:A"))
Set srcRng = .Range("A2:A" & LRow)
Set destRng = .Range(sCella_Convalida_Dati)
End With
Set OleObj = SH.OLEObjects("ComboBox1")
Set CBox = OleObj.Object
sCriterio = "*" & CBox.Value & "*"
arrIn = srcRng.Value
For i = 1 To UBound(arrIn)
If arrIn(i, 1) Like sCriterio Then
iCtr = iCtr + 1
ReDim Preserve arrOut(1 To iCtr)
arrOut(iCtr) = arrIn(i, 1)
End If
Next i
If CBool(iCtr) Then
With CBox
.List = arrOut
.DropDown
.ListRows = 25
End With
End If
End Sub
'--------->>
Public Function LastRow(SH As Worksheet, _
Optional Rng As Range, _
Optional minRow As Long = 1)
If Rng Is Nothing Then
Set Rng = SH.Cells
End If
On Error Resume Next
LastRow = Rng.Find(What:="*", _
After:=Rng.Cells(1), _
Lookat:=xlPart, _
LookIn:=xlFormulas, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
If LastRow < minRow Then
LastRow = minRow
End If
End Function
'<<========
- Alt+Q per chiudere l'editor di VBA e tornare a Excel
- Salva il file con l’estensionexlsm
Potresti scaricare il mio file aggiornato Aurelio20210407.xlsm
===
Regards,
Norman