Ciao Joseph,
vorrei poter "adeguare" lo scorrimento della casella lungo la barra di scorrimento in funzione del numero degli elementi della casella di Riepilogo , ovvero fare in modo che la casella di scorrimento della barra verticale sia più scorrevole possibile con
il minimo di List Box1.list=lista e meno scorrevole con il massimo di lista.
Mi spiace ma non ho capito molto!
Se stai facendo riferimento al fatto che il controllo ListBox scorrerà verso il basso fino al record 3000, anche se ci sono (ad esempio) solo 1000 record, credo che la soluzione migliore sia quella di limitare la dimensione del controllo ListBox al numero
di record da caricare. A questo proposito vedi il codice qui sotto.
Per facilitare lo scorrimento, si potrebbe facilmente aggiungere pulsanti per scorrere, diciamo, 50 e 100 record:

Vorrei anche poter risolvere un altro aspetto correlato alla barra di scorrimento verticale .Se seleziono un nominativo posto al centro della casella di Riepilogo e nel mio caso premo tasto di conferma con reinializzazione dello UserForm accade che tutta
la lista scorre verso il basso e il nominativo lo ritrovo al bordo inferiore del riepilogo.
A meno che non vi è una ragione non divulgata, non capisco perché vorresti ri-inizializzare la Userform. Ad ogni modo, credo che potresti sfruttare la proprietà
TopIndex del controllo ListBox per assicurarsi che il record selezionato diventa sempre il primo record visibile.
Quindi, forse prova qualcosa del genere:
'=========>>
Option Explicit
Private SH As Worksheet
Private bFlag As Boolean
Private Const iScrollPiccolo As Long = 50 '<<=== Modifica
Private Const iScrollGrande As Long = 100 '<<=== Modifica
'--------->>
Private Sub UserForm_Initialize()
Dim WB As Workbook
Dim Rng As Range
Dim lista(3000, 3) As String
Dim LRow As Long
Const sFoglio As String = "Foglio1" '<<=== Modifica
Const iPrimaRigaDati As Long = 10
Set WB = ThisWorkbook
Set SH = WB.Sheets(sFoglio)
With SH
LRow = .Range("B" & iPrimaRigaDati).End(xlDown).Row
Set Rng = .Range("A" & iPrimaRigaDati). _
Resize(LRow - iPrimaRigaDati + 1, 4)
End With
bFlag = True
With Me
With .ListBox1
.ColumnHeads = True
.RowSource = Rng.Address(external:=True)
.ColumnCount = 4
.ListIndex = 0
.ColumnWidths = "60;60;60" '<<=== Modifica
End With
With .cbConferma
.Caption = "Conferma"
.ForeColor = vbGreen
.Font.Bold = True
.AutoSize = True
End With
With .cbScrollAvantiPiccolo
.Caption = ">> " & iScrollPiccolo
.ForeColor = vbGreen
.AutoSize = True
End With
With .cbScrollAvantiGrande
.Caption = ">> " & iScrollGrande
.ForeColor = vbGreen
.AutoSize = True
End With
With .cbScrollInDietroPiccolo
.Caption = "<< " & iScrollPiccolo
.ForeColor = vbRed
.AutoSize = True
End With
With .cbScrollInDietroGrande
.Caption = "<< " & iScrollGrande
.ForeColor = vbRed
.AutoSize = True
End With
End With
bFlag = False
End Sub
'--------->>
Private Sub ListBox1_Click()
Dim unità, cond As String
Dim a As Long, r As Long
If bFlag Then
Exit Sub
End If
With Me.ListBox1
If .ListIndex = -1 Then
r = 0
Else
r = .ListIndex
End If
a = r + 11
SH.Cells(7, 2).Value = a
cond = Cells(a, 2).Value '// Non serve alcuno scopo??
unità = Cells(a, 3).Value '// Non serve alcuno scopo??
End With
End Sub
'--------->>
Private Sub cbConferma_Click()
Dim Rng As Range
Dim iVal As Long
bFlag = True
With SH
Set Rng = .Cells(7, 2)
iVal = Rng.Value
If Not iVal = 0 Then
.Cells(iVal, 4) = "confermato"
End If
End With
With Me.ListBox1
.TopIndex = .ListIndex
End With
bFlag = False
End Sub
'--------->>
Private Sub cbScrollAvantiPiccolo_Click()
Call FastScroll(50)
End Sub
'--------->>
Private Sub cbScrollAvantiGrande_Click()
Call FastScroll(100)
End Sub
'--------->>
Private Sub cbScrollInDietroPiccolo_Click()
Call FastScroll(-50)
End Sub
'--------->>
Private Sub cbScrollInDietroGrande_Click()
Call FastScroll(-100)
End Sub
'--------->>
Private Sub FastScroll(iScroll)
Dim iCtr As Long
Dim bValid As Boolean
bFlag = True
With Me.ListBox1
iCtr = .ListIndex + iScroll
If iScroll > 0 Then
bValid = iCtr <= .ListCount
Else
bValid = iCtr >= 0
End If
If bValid Then
.ListIndex = .ListIndex + iScroll
End If
End With
bFlag = False
End Sub
'<<=========
Approfitterei per chiederti gentilmente di contrassegnare la mia risposta nel tuo thread precedente come
Risposta. In questo modo, tu aiuterai anche coloro che potessero cercare soluzioni ai problemi simili negli archivi della Community.
===
Regards,
Norman
