Domanda Excel 2013. Avanzamento voci con SpinButton.

dautattmaui

Utente abituale
25 Gennaio 2016
180
0
16
Bari
2013
2
Buongiorno a tutti, sono a chiedere un suggerimento per un applicazione che funziona ma vorrei poterla perfezionare.
Regolarmente le TextBox vengono popolate dalla voce scelta dal pulsante e con SpinButton, regolarmente avanza o arretra per tutte le voci inserire nelle varie
colonne. Scelta la voce per es. "C", gradirei che SpinButton funzioni solo ed esclusivamente per la voce "C" e non per tutte le voci.
In pratica con la voce "C" dovrebbe essere interessate solo:
"Calabrese-Carmina e Circoscrizione".
Spero di essere stato chiaro, ringrazio anticipatamente allego il codice ed il file.

Visual Basic:
Private Sub ButtonScelta_Click()

lt = Len(TextBox7.Text)
If TextBox7 = "" Then
Beep: MsgBox "Inserire un elemento", vbInformation, "Prova"
   TextBox7 = ""
   TextBox7.SetFocus
   Exit Sub
End If
Riga = 6
uRiga = Foglio1.Range("D" & Rows.Count).End(xlUp).Row
Sheets("Prova").Select
found = 0
Set Intervallo = Foglio1.Range("D6:I" & uRiga)
For iCount = 1 To Intervallo.Cells.Count
     Set cell = Intervallo(iCount)

     If Left(UCase(cell.Text), lt) = Left(UCase(TextBox7.Text), lt) Then
     cell.Select
     TextBox1 = Cells(cell.Row, "D")
     TextBox2 = Cells(cell.Row, "E")
     TextBox3 = Cells(cell.Row, "F")
     TextBox4 = Cells(cell.Row, "G")
     TextBox5 = Cells(cell.Row, "H")
     TextBox6 = Cells(cell.Row, "I")
     Riga = cell.Row
  SpinButton1.Value = Riga
     found = 1
     Exit For
   End If
Next
If found = 0 Then
   Call Cancella
    MsgBox "Record non trovato", vbInformation, "Prova"
End If
Friga = Riga + 1
End Sub

Private Sub SpinButton1_Change()

With Me
For i = 1 To 6
     Me.Controls("TextBox" & i) = sh.Range("D" &
.SpinButton1.Value).Offset(, i - 1)
Next i
If Scr = 1 Then
Scr = 0
Else
         Rows(.SpinButton1.Value).Select
     If SpinButton1.Value = 6 Then
         MsgBox "Primo nominativo!", vbOKOnly + vbInformation, _
                "                       Attenzione !!"
     ElseIf SpinButton1.Value = Int(sh.Range("D200").End(xlUp).Row) Then
         MsgBox "Ultimo nominativo!", vbOKOnly + vbInformation, _
                "                       Attenzione !!"
End If
     End If
         End With
End Sub
 

Allegati

Marco Lauria

Utente abituale
2 Gennaio 2017
391
33
28
54
Roma
www.artigianamaterassi.net
Excel 2016
19
Una soluzione "rozza" potrebbe essere questa:


Visual Basic:
With Me
        If .TextBox7 <> "" Then
            If .TextBox7 = Left(sh.Range("D" & .SpinButton1.Value), 1) Then
                For i = 1 To 6
                        Me.Controls("TextBox" & i) = sh.Range("D" & .SpinButton1.Value).Offset(, i - 1)
                Next i
            End If
        Else
            For i = 1 To 6
                        Me.Controls("TextBox" & i) = sh.Range("D" & .SpinButton1.Value).Offset(, i - 1)
                Next i
        End If
 

dautattmaui

Utente abituale
25 Gennaio 2016
180
0
16
Bari
2013
2
Innanzitutto grazie delle risposte. Descrivo in dettaglio ciò che gradirei:
alla TextBox7, inserisco la lettera "C", con il pulsante scelta, i TextBox si popolano Calabrese ed ecc.,
con SpinButton avanzo ed i TextBox si ripopolano regolarmente con Carmina, Circoscrizione e va bene così.
Sempre con il SpinButton con il pulsante indietro, gradirei che si bloccasse a Calabrese, attualmente va oltre fino alla prima voce.
Quindi lo SpinButton deve lavorare solo con le voci che iniziano con la "C".
Grazie ancora.
 

dautattmaui

Utente abituale
25 Gennaio 2016
180
0
16
Bari
2013
2
Ciao Marco, la tua soluzione rozza funziona, quindi non è poi così rozza. Una cortesia per completare, ho provato e non sono riuscito ad Inserire un messaggio alla prima voce è all'ultima voce.
Grazie ancora.

Una soluzione "rozza" potrebbe essere questa:


Visual Basic:
With Me
        If .TextBox7 <> "" Then
            If .TextBox7 = Left(sh.Range("D" & .SpinButton1.Value), 1) Then
                For i = 1 To 6
                        Me.Controls("TextBox" & i) = sh.Range("D" & .SpinButton1.Value).Offset(, i - 1)
                Next i
            End If
        Else
            For i = 1 To 6
                        Me.Controls("TextBox" & i) = sh.Range("D" & .SpinButton1.Value).Offset(, i - 1)
                Next i
        End If
 

dautattmaui

Utente abituale
25 Gennaio 2016
180
0
16
Bari
2013
2
Buongiorno Marco, grazie per aver sistemato il codice, ma non va bene ancora e spero che sia realizzabile.
L'applicazione va bene, gradirei inserire dei MsgBox.
Se la voce è unica, per es. "Legale o Bertizzolo" il MsgBox che dovrebbe uscire è "Unica Voce inserita".
Se sono più di una per es. "Calabrese, Carmina o Circoscrizione" il MsgBox che dovrebbe uscire è "Prima voce o ultima voce".
Grazie ancora per l'aiuto e l'interessamento.
 

Marco Lauria

Utente abituale
2 Gennaio 2017
391
33
28
54
Roma
www.artigianamaterassi.net
Excel 2016
19
Buongiorno,
ti ho corretto anche un piccolo bug.
Quando apri la userform, e inizi a scorrere con lo spinbutton, si posiziona erroneamente sul secondo record
in questo modo invece, appena la apri, si posiziona sul primo record. Sostituisci questa routine:

Visual Basic:
Private Sub UserForm_Initialize()

    Scr = 1
    Set sh = Worksheets("Prova")
        With sh
            lRighe = .UsedRange.Rows.Count - 5
            Set Rng = .Range("D6:D" & lRighe)
        End With
      
        With Me.SpinButton1
            .Min = 6
            .Max = Int(sh.Range("D200").End(xlUp).Row)
            .Value = 6
        End With
    Cancella
    For i = 1 To 6
        Me.Controls("TextBox" & i) = sh.Range("D" & i + 5).Offset(, i - 1)
    Next i
    TextBox7.SetFocus
    
End Sub
P.S.
Inizia tu la routine di "Primo e ultimo record" da selezione carattere, poi lo aggiustiamo insieme.
 

Marco Lauria

Utente abituale
2 Gennaio 2017
391
33
28
54
Roma
www.artigianamaterassi.net
Excel 2016
19
ti ho corretto un'ulteriore bug:
sostituisci l'evento change dello spinbutton:

Visual Basic:
Private Sub SpinButton1_Change()

    With Me
        If .TextBox7 <> "" Then
            If .TextBox7 = Left(sh.Range("D" & .SpinButton1.Value), 1) Then
                Rows(.SpinButton1.Value).Select
                For i = 1 To 6
                        Me.Controls("TextBox" & i) = sh.Range("D" & .SpinButton1.Value).Offset(, i - 1)
                Next i
            End If
        Else
            For i = 1 To 6
                        Me.Controls("TextBox" & i) = sh.Range("D" & .SpinButton1.Value).Offset(, i - 1)
                Next i
        End If
        If Scr = 1 Then
            Scr = 0
        Else
            If .TextBox7 = "" Then
                Rows(.SpinButton1.Value).Select
            ElseIf .TextBox7 <> "" And .TextBox7 = Left(sh.Range("D" & .SpinButton1.Value), 1) Then
                Rows(.SpinButton1.Value).Select
            End If
            If SpinButton1.Value = 6 Then
                MsgBox "Primo nominativo!", vbOKOnly + vbInformation, _
                    "                       Attenzione !!"
            ElseIf SpinButton1.Value = Int(sh.Range("D200").End(xlUp).Row) Then
                MsgBox "Ultimo nominativo!", vbOKOnly + vbInformation, _
                    "                       Attenzione !!"
            End If
        End If
    End With
   
End Sub
P.S.
la variabile Scr a cosa serve????
 

dautattmaui

Utente abituale
25 Gennaio 2016
180
0
16
Bari
2013
2
Marco, ti ringrazio per la pazienza, ho inserito la modifica suggerita e riscontro le seguenti anomalie:
> scelta una voce per es. "Legale", con SpinButton in Avanti, si blocca sulla voce successiva "Bertizzolo".

> con il pulsante "AZZERA", le TextBox si popolano della prima voce "Tito" e mi esce MsgBox "Prima voce" , successivamente, cliccando nuovamente sul relativo pulsante avviene la cancellazione dei Record dalle TextBox.

Ho eliminato una parte del codice su Sub Cancella ed il pulsante Azzera va bene. Allego il codice.
Visual Basic:
Sub Cancella()
     With Me
         For i = 1 To 7
             .Controls("TextBox" & i) = ""
         Next i
     End With

'    With Me.SpinButton1
'            .Min = 6
'            .Value = 6
'        End With
Rimane solo da sistemare i relativi MSGBOX, che al momento non riesco.
 

Marco Lauria

Utente abituale
2 Gennaio 2017
391
33
28
54
Roma
www.artigianamaterassi.net
Excel 2016
19
dautattmaui @dautattmaui ,
ok per il pulsante azzera......
ma io non ho riscontrato l'errore che tu dici:

> scelta una voce per es. "Legale", con SpinButton in Avanti, si blocca sulla voce successiva "Bertizzolo".

Hai modificato tutte le routine che ho inserito?
 

dautattmaui

Utente abituale
25 Gennaio 2016
180
0
16
Bari
2013
2
Ok Zer0Kelvin e Marco, grazie per il suggerimento/idea, provo a modificare il tutto usando la ListBox.
Spero bene, vi aggiorno.
 

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!