Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Antonio,
Certamente Norman, pensavo fosse doveroso e carino terminare questo thread caricando il file a cui sto' lavorando
Con questa ultima modifica il file acquista un minimo di funzionalità,
Non riesce lo stesso a salire di UNA riga, la variabile "i" raggiunge lo Zero, secondo me non viene bloccato il ciclo appena trova la prima riga non nascosta. Ho provato a piazzare qua e là un "EXIT FOR" ma niente e non riesco a capire dove va messo
Ho caricato il tuo file e, con riferimento all'uso del pulsante Precedente, vedo subito due problemi col codice nella tua procedura cmdPrecedente_Click:
- Poiché hai disattivato quella porzione di codice che identifica il record filtrato attualmente selezionato, il valore della variabile i sarà sempre zero e, quindi, il ciclo per selezionare il record filtrato precedente verrà sempre bypassato: 0 sarà sempre meno di 1!!
- Anche riattivando il codice di cui sopra, il ciclo per selezionare il record precedente uscirà sempre al primo passo perché hai inserito l'istruzione Exit For nel posto sbagliato. Pertanto, sostituisci: For k = i - 1 To 1 Step -1
Next kIf Rng.Rows(k).Hidden = False Then Rng.Cells(k, 1).Select End If **Exit For**
con:
For k = i - 1 To 1 Step -1
If Rng.Rows(k).Hidden = False Then
Rng.Cells(k, 1).Select
Exit For
End If
Next k
In questo modo il codice uscirà dal ciclo solo quando verrà identificato il record precedente.
Con queste due modifiche viene identificato il pulsante funzioni e il record precedente
Per completezza, la procedura di interesse diventa:
'========>>
Private Sub cmdPrecedente_Click()
Dim SH As Worksheet
Dim Rng As Range, Rng2 As Range
Dim oTabella As ListObject
Dim i As Long, j As Long, k As Long
Dim l As Long, m As Long
Const sTabella As String = "Anagrafica" '<<=== Modifica
Const sFoglio As String = "BaseDati" '<<=== Modifica
Set oTabella = ActiveSheet.ListObjects(sTabella)
Set Rng = oTabella.DataBodyRange
On Error Resume Next
Set Rng2 = Rng.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
' In quale righa è la cella attiva ?
**For i = 1 To Rng.Rows.Count**
**If Rng.Rows(i).Hidden = False Then**
**j = j + 1**
**If Rng.Rows(i).Row = ActiveCell.Row Then**
**TextRigaAttiva = j**
**Exit For**
**End If**
**End If**
**Next i**
'salire di una riga
For k = i - 1 To 1 Step -1
If Rng.Rows(k).Hidden = False Then
Rng.Cells(k, 1).Select
**Exit For**
End If
Next k
UserForm\_Activate
End Sub
'<<========
===
Regards,
Norman