Discussione: Corso VBA
Visualizza messaggio singolo
Vecchio 23-06-2014, 20.40.00   #42
Alexsandra
Senior Member
WT Expert
 
L'avatar di Alexsandra
 
Registrato: 19-05-2007
Loc.: Verona
Messaggi: 1.208
Alexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raroAlexsandra è un gioiello raro
I Controlli ScrollBar e SpinButton



Ogni volta che l'utente ha un discreto numero di scelte da fare per l'inserimento dei dati in un foglio di lavoro di Excel è possibile risparmiare tempo automatizzando il modo in cui si inseriscono questi dati. È possibile farlo in diversi modi e uno di loro è quello di utilizzare un pulsante di selezione o una barra di scorrimento.


Il Controllo ScrollBar
Un controllo ScrollBar, o barra di scorrimento, permette di cambiare incrementando o decrementando il valore visualizzato da altri controlli come UserForm, TextBox, Label, etc. o il valore in un intervallo di celle quando un utente fa clic sulle frecce di scorrimento, oppure trascina la casella di scorrimento o clicca in una zona compresa tra una freccia di scorrimento e la casella di scorrimento. Il componente ScrollBar fornisce all’utente uno strumento per gestire un valore definito dal programma e può essere rappresentato graficamente in verticale o orizzontale e al momento della sua creazione VBE lo orienta verticalmente per default, ma possono essere ridimensionati in modo da estendersi orizzontalmente e assumere tale orientamento.

Le principali proprietà di questo controllo sono:

Value: Restituisce o imposta il valore del componente utilizzando dati di tipo Long
SmallChange: Specifica il cambiamento incrementale, come un valore intero (variabile Long), che si verifica quando un utente fa clic sulla freccia di scorrimento. Il valore di default è 1.
LargeChange: Specifica il cambiamento incrementale quando l'utente fa clic tra una freccia di scorrimento e la casella di scorrimento. Il valore di default è 1.
Min e Max: Sono valori interi (Long) che specificano il valore massimo e minimo accettabili del controllo ScrollBar. In una barra di scorrimento verticale cliccando la freccia di scorrimento verso il basso, aumenta il valore e la posizione più bassa visualizza il valore massimo (sarà inverso quando si sceglie la freccia di scorrimento). In una barra di scorrimento orizzontale clic sulla freccia di scorrimento a destra aumenta il valore e la posizione più a destra visualizza il valore massimo (sarà inverso quando si fa clic sulla freccia di scorrimento a sinistra).
Orientation: Determina una barra di scorrimento verticale o una barra di scorrimento orizzontale. Dispone di 3 impostazioni:
  • fmOrientationAuto (Valore -1) - Questo è il valore predefinito in cui le dimensioni della ScrollBar sono determinare automaticamente, sia in verticale o orizzontale, nei casi in cui il valore della larghezza è più alto dell’altezza, allora la ScrollBar è orizzontale e dove l'altezza è più alta della larghezza, allora la ScrollBar è verticale
  • FmOrientationVertical (Valore 0) – La ScrollBar è verticale
  • FmOrientationHorizontal (valore 1) – La ScrollBar è orizzontale.

Codice:
Private Sub UserForm_Activate()  ‘ Mostrare un Frame con scrollBar laterale
   With Me.Frame1
        .ScrollBars = fmScrollBarsVertical ' creare barra verticale
         'Cambia questi valori per la dimensione della barra
        .ScrollHeight = .InsideHeight * 2
        .ScrollWidth = .InsideWidth * 9
    End With
End Sub
Codice:
Private Sub UserForm_Activate()  ‘Mostrare una Userform con scrollbar laterale
    With Me
        .ScrollBars = fmScrollBarsVertical
                'Cambia questi valori per la dimensione della barra
        .ScrollHeight = .InsideHeight * 2
        .ScrollWidth = .InsideWidth * 9
    End With
End Sub
Codice:
Private Sub ScrollBar1_Change()  ‘Incrementare valore Textbox dalla scrollbar
    Me.TextBox1.Text = Me.ScrollBar1.Value
End Sub
 
Private Sub UserForm_Initialize()
    With Me.ScrollBar1
        .Value = 0
        .Min = 0
        .Max = 100
        .LargeChange = 10
        .SmallChange = 5
    End With
End Sub
Codice:
Option Explicit    ‘scorrere le righe di un foglio e mostrare contenuto in Textbox
  Dim wks As Worksheet
Dim riga_I, riga_F As Long
 Private Sub ScrollBar1_Change()
    Dim row As Long
    row = CLng(Me.ScrollBar1.Value)
    With wks
        Me.TextBox1.Text = .Cells(row, 1)
        Me.TextBox2.Text = .Cells(row, 2)
        Me.TextBox3.Text = .Cells(row, 3)
        Me.TextBox4.Text = .Cells(row, 4)
        Me.TextBox5.Text = .Cells(row, 5)
    End With
End Sub
 
Private Sub UserForm_Initialize()
    Set wks = Worksheets("Foglio1")
      Riga_I = 2
    Riga_F = wks.Cells(riga_I, 1).End(xlDown).row
        With Me.ScrollBar1
        .Value = riga_I
        .Min = riga_I
        .Max = riga_F
        .LargeChange = 1
        .SmallChange = 1
    End With
    Call ScrollBar1_Change
End Sub

Il Controllo SpinButton
Un controllo SpinButton, o pulsante di selezione, viene spesso utilizzato per incrementare o decrementare il valore di un altro controllo, ad esempio un controllo Label e la proprietà SmallChange determina il valore di un controllo SpinButton quando cambia. Un controllo SpinButton è molto simile a un controllo ScrollBar e viene utilizzato per incrementare o diminuire il valore (cioè un numero, data, ora, etc.) visualizzato da altri controlli UserForm, TextBox, Label, etc. o il valore in un intervallo di celle. Un controllo SpinButton (noto anche come un controllo di selezione) funziona come un controllo ScrollBar, con proprietà simili (cioè SmallChange, Min, Max) e la proprietà SmallChange specifica il cambiamento incrementale, come un valore intero, che si verifica quando un utente fa clic sulla freccia di scorrimento. Un controllo SpinButton non ha una struttura LargeChange come in una ScrollBar e in una barra di scorrimento verticale cliccando la freccia di scorrimento diminuisce il valore mentre premendo la freccia di scorrimento su un Spinner verticale aumenta il valore.

La differenza tra i controlli ScrollBar e SpinButton è che la struttura ScrollBar può essere trascinata per modificare il valore del controllo su incrementi maggiori (pur mantenendo l'incremento basso per click), che i vantaggi di una ScrollBar per effettuare una selezione da tutto un numero di valori e coprono una gamma estremamente vasta.

Esempio: Utilizzare un controllo SpinButton per cambiare le date in una TextBox, all'interno di un intervallo specificato:

Fig. 1
Codice:
Private Sub UserForm_Initialize()
'popolare il TextBox con una data
Dim dt As Date
'Non consentire l'immissione manuale in TextBox
TextBox1.Enabled = False
dt = "10/10/2014"
TextBox1.Text = dt
End Sub
 
Private Sub SpinButton1_SpinUp()
'aumentare di un giorno alla volta, quando siamo nello stesso mese
Dim dt_su As Date
Dt_su = "30/10/2014"
 If DateValue(TextBox1.Text) < dt_su Then
TextBox1.Text = DateValue(TextBox1.Text) + 1
End If
End Sub
 
Private Sub SpinButton1_SpinDown()
 ‘diminuire di un giorno alla volta, quando siamo nello stesso mese
Dim dt_giu As Date
Dt_giu = "01/10/2014"
If DateValue(TextBox1.Text) > dt_giu Then
TextBox1.Text = DateValue(TextBox1.Text) - 1
End If
End Sub
Esempio: Spostare le voci in alto e in basso selezionate in un ListBox utilizzando il controllo SpinButton

Fig. 2
Codice:
Private Sub carica_Box()
Dim n As Integer, cell As Range, rng As Range
Set rng = Foglio1.Range("A1:A6")
For n = 1 To ListBox1.ListCount
ListBox1.RemoveItem ListBox1.ListCount - 1
Next n
For Each cell In rng.Cells
Me.ListBox1.AddItem cell.Value
Next cell
End Sub

Private Sub UserForm_Initialize()
carica_Box
End Sub

Private Sub SpinButton1_SpinUp()
'cliccare sulla freccia in alto per spostare l'elemento selezionato nel ListBox verso l’alto, sia nel 
’ListBox che nel foglio di lavoro collegato
Dim n As Long
n = ListBox1.ListIndex
If n > 0 Then
Foglio1.Range("A" & n + 1).Value = Foglio1.Range("A" & n).Value
Foglio1.Range("A" & n).Value = ListBox1.Value
carica_Box
ListBox1.Selected(n - 1) = True
ElseIf ListBox1.ListIndex = 0 Then
MsgBox "Il primo elemento non può essere spostato in alto!"
Else
MsgBox "Seleziona una voce!"
End If
End Sub

Private Sub SpinButton1_SpinDown()
'cliccare sulla freccia in basso per spostare l'elemento selezionato nel ListBox verso il basso, sia nel ’ListBox che nel foglio di lavoro collegato
Dim n As Long
n = ListBox1.ListIndex
If n >= 0 And n < ListBox1.ListCount - 1 Then
Foglio1.Range("A" & n + 1).Value = Foglio1.Range("A" & n + 2).Value
Foglio1.Range("A" & n + 2).Value = ListBox1.Value
carica_Box
ListBox1.Selected(n + 1) = True
ElseIf ListBox1.ListIndex = ListBox1.ListCount - 1 Then
MsgBox "L'ultimo elemento non può essere spostato in basso!"
Else
MsgBox "Seleziona una voce!"
End If
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub
___________________________________

- Il primo fondamento della sicurezza non e' la tecnologia, ma l'attitudine mentale -
Alexsandra non è collegato