Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Sol39,
Dato il requisito di filtrare il contenuto del controllo ListBox, non è direttamente possibile aggiungere le intestazioni di colonna.
Esistono due modi per ovviare a questo problema: sia aggiungere 6 etichette sopra la Listbox (vedi il file di prova che ho caricato) che, in alternativa, creare una seconda ListBox per visualizzare solo la riga di intestazione.
Se preferiresti questa seconda soluzione, modificherò di conseguenza il mio file di prova.
Per adottare questa seconda soluzione, prova a sostituire il codice con la seguente versione:
'=========>>
Option Explicit
Option Compare Text
'--------->>
Public Sub Crea_Intestazioni(lbx_Body As MSForms.ListBox, _
lbx_Header As MSForms.ListBox, _
arrHeaders As Variant)
Dim i As Long
With lbx_Header
.ColumnCount = lbx_Body.ColumnCount
.ColumnWidths = lbx_Body.ColumnWidths
.Clear
.AddItem
For i = 0 To UBound(arrHeaders)
.List(0, i) = arrHeaders(i)
Next i
lbx_Body.ZOrder (1)
.ZOrder (0)
.SpecialEffect = fmSpecialEffectFlat
.BackColor = RGB(200, 200, 200)
.Height = 10
.Width = lbx_Body.Width + 12
.Left = lbx_Body.Left
.Top = lbx_Body.Top - (.Height - 1)
End With
End Sub
'--------->>
Private Sub UserForm_Activate()
Call Crea_Intestazioni(Me.ListBox1, _
Me.ListBox2, Array("Nome", "Specialità", _
"Email", "Costo1", "Costo2", "Costo3"))
End Sub
'--------->>
Private Sub UserForm_Initialize()
With Me.ListBox1
.ColumnCount = 6
.ColumnWidths = "70;70;125,90;90;70"
End With
End Sub
'--------->>
Private Sub CommandButton1_Click()
Dim Rng As Range, rCell As Range
Dim arrIn As Variant, arrOut() As Variant
Dim sStr As String
Dim i As Long, j As Long, iCtr As Long
Dim UB As Long, UB2 As Long
With Worksheets("Sheet1")
Set Rng = .Range(.Cells(1, 1), _
.Cells(.Cells(65536, 2).End(xlUp).Row, 1))
Set Rng = Rng.Resize(, 6)
arrIn = Rng.Value
UB = UBound(arrIn)
UB2 = UBound(arrIn, 2)
sStr = "*" & TextBox1.Text & "*"
For i = 1 To UB
If arrIn(i, 2) Like sStr Then
iCtr = iCtr + 1
ReDim Preserve arrOut(1 To UB2, 1 To iCtr)
For j = 1 To UB2
arrOut(j, iCtr) = arrIn(i, j)
Next j
End If
Next i
End With
If CBool(iCtr) Then
Me.ListBox1.Column = arrOut
Else
Me.ListBox1.Clear
Call MsgBox( _
Prompt:="Nessun record trovato!", _
Buttons:=vbInformation, _
Title:="REPORT")
End If
End Sub
'<<=========
Potresti scaricare il mio file di prova Sol2_20200403.xlsm
===
Regards,
Norman