numero righe con filtri automatici
Hai un problema con Excel? 
numero righe con filtri automatici
di marinoernestoch data: 07/08/2014 21:36:38
Buona sera.
In VBA, com'è possibile conoscere le righe che soddisfano una condizione di filtro, senza essere obbligati a passare dal selection.copy?
Con l'esempio che allego, appunto prima del comando copy, ottengo sempre il valore 1, mentre ottengo il valore reale, solo dopo il paste.
Inoltre perchè se non do un range...select a partire dalla riga successiva al filtro, ma da la riga del filtro anche se non soddisfa la condizione?
Qualcuno mi può aiutare?
ringrazio
Sub con_filtro()
If ActiveSheet.AutoFilterMode Then
' On Error Resume Next
If Not ActiveSheet.ShowAllData Then ActiveSheet.ShowAllData '<============ a volte da errore a volte NO?????
'On Error GoTo 0 '<============ forse da errore quando è già showall
ActiveSheet.AutoFilter.Range.AutoFilter
End If
prima_riga = Range("Riga_testata_attivita").Row
ultima_riga = Cells(Rows.Count, 5).End(xlUp).Row
colonna = Range("colonna_cf_prestatore_su_attivita").Address(0, 0)
colonna = Replace(colonna, ":", prima_riga & ":") & ultima_riga
colonna_dati = Replace(colonna, prima_riga & ":", prima_riga + 1 & ":") '<= mi devo posizionare avanti di uno altrimenti mi da anche la riga del filtro
ricerca = InputBox("digita codice o fine")
if ucase(ricerca) = "FINE" then exit sub
ActiveSheet.Range(colonna).AutoFilter Field:=1, Criteria1:=ricerca
qta = Selection.Rows.Count '<==== mi da sempre 1 ????
On Error Resume Next
Range(colonna_dati).SpecialCells(xlCellTypeVisible).Select
If Err.Number = 0 Then
On Error GoTo 0
qta = Selection.Rows.Count '<===== mi da 1 ???
' Selection.EntireRow.Copy '<=====si ferma alle righe contigue
Selection.EntireRow.Select '<==== mi seleziona tutti
qta = Selection.Rows.Count '<===== mi da sempre1 ???
Selection.Copy '<=== copia tutte le righe
' Workbooks("DATA_BASES_ver_X.xls").Worksheets("prova").Activate
ActiveSheet.Paste
qta2 = Selection.Rows.Count '<==== mi dice quante righe ha copiato
If Selection.Rows.Count > 1 Then ActiveCell.End(xlDown).Select
ActiveCell.Offset(1, 0).Select
Workbooks("DATA_BASES_ver_0.xls").Worksheets("ATTIVITA").Activate
Else
On Error GoTo 0
MsgBox "Non trovato=" & ricerca
End If
ActiveSheet.ShowAllData
ActiveSheet.AutoFilter.Range.AutoFilter
Application.EnableEvents = True
End Sub
|
di scossa data: 07/08/2014 22:04:25
Non alleghi alcun file quindi il tuo codice serve a poco, per cui ti do solo uno spunto.
| scossa's web site |
Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
Public Sub contarighe()
Dim rng As Range
Dim nRows As Long
For Each rng In Selection.SpecialCells(xlCellTypeVisible).Areas
nRows = nRows + rng.Rows.Count
Next
MsgBox nRows
End Sub |
di marinoernestoch (utente non iscritto) data: 07/08/2014 22:40:25
Scossa, ho aggiunto il foglio.
Ho corretto la macro per continuare nelle prove, per cui potrebbe essere <> da quanto postato:ma il succo non cambia.
Chiedo anche lumi sulle altre perplessità.
Ringrazio molto.
ernesto
Vuoi Approfondire?