Nascondere le righe vuote
Hai un problema con Excel? 
Nascondere le righe vuote.
di Spyball (utente non iscritto) data: 21/11/2013 15:46:29
Buongiorno a tutti gli utenti del forum. E' da poco che mi sto cimentando nel linguaggio VBA e non riesco a creare un codice che alla pressione di un bottone (gia creato) mi nasconda tutte le RIGHE vuote di un determinato intervallo.
L'intervallo in questione è (G92:AQ786). Quindi se in questo intervallo una riga non ha celle con valori, vorrei che la riga sia nascosta.
Io ho creato il codice sotto riportato ma non funziona o meglio mi nasconde anche le righe in cui sono presenti valori.
Al contrario sono riuscito a creare il codice che mi scopra le celle nascoste e che mi svuoti la tabella una volta terminato il lavoro (piccola soddsfazione anche se molto banale
Grazie mille !!
Private Sub CommandButton1_Click()
For Each CL In Range("G92:AQ786")
If CL.Value = "" Then CL.EntireRow.Hidden = True
Next CL
End Sub |
di totygno71 data: 21/11/2013 15:49:54
Il codice che hai creato spazzola tutte le celle del range che hai individuato e se in questo trova una cella vuota allora nasconde l'intera riga anche se le celle vicine sono piene...
Devi indirizzare la ricerca solo sulle celle che vuoi controllare se sono vuote e cosi risolvi il tutto.
Spero di essere stato spiegato ^_^
nascondi righe vuote
di canapone (utente non iscritto) data: 21/11/2013 16:01:09
Ciao,
faccio una prova.
La macro nasconde e scopre
rv.EntireRow.Hidden = Not rv.EntireRow.Hidden
le righe vuote
-----------------
Se vuoi solo nascondere
rv.EntireRow.Hidden = True
---------------------------
Spero sia d'aiuto
Sub nascondiRV()
Dim rv As Range
Set rv = Range([g92].End(xlDown), [aq786].End(xlUp))
On Error Resume Next
Set rv = rv.SpecialCells(4)
If Err = 0 Then
rv.EntireRow.Hidden = Not rv.EntireRow.Hidden
End If
End Sub |
di Grograman (utente non iscritto) data: 21/11/2013 16:13:19
Range("G92:AQ786").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = True
|
di Raffaele_53 (utente non iscritto) data: 21/11/2013 16:21:28
Dico la mia solo a Canapone
Scusami, se mi permetto nel VBA, non potrei mai con le formule...
Se non erro si tratta di eliminare righe oppure nasconderle.
Non puoi fare ----> Range([g92].End(xlDown), [aq786].End(xlUp))
Sono su righe/colonne diverse
Devi elaborare ogni cella della riga per vedere se è vuota.
Al quel punto nascondi la riga. Ma come NON desritto dall'utente succede che se nascondiamo la rigaX, la macro va bene.
Ma nascondiamo anche quello che c'è in rigaX dalla colonna A sino G e poi nascondiamo dopo dopo la colonna AQ
Questo il problema, non si possono nascondere dei range. Solo righe e colonne.
Nascondere = chiudere o eliminarle (mai dei range, almeno possiamo solo eliminarle e spostare le celle sotto per comodita al loro posto)
nascondi righe vuote
di canapone (utente non iscritto) data: 21/11/2013 16:21:58
Ciao a tutti
attenzione : la macro che ho condiviso non va bene, non fa quello che pensavo.
Colorare forme se cambia una cella
di canapone (utente non iscritto) data: 21/11/2013 16:29:58
Ciao Raffaele,
grazie! Stavo adattando una macro che uso al lavoro per un altro fine.
Ho trovato questo in rete: sono molto affascinato dal VBA (che capisco poco poco)
Saluti
Sub vadoanascondermi()
Dim RV As Range
Dim CELL As Range
Set RV = Application.Intersect(ActiveSheet.UsedRange, Range("g92:aq786"))
For Each CELL In RV
If Application.CountA(CELL.EntireRow) = 0 Then CELL.EntireRow.Hidden = True
Next
End Sub
|
di Raffaele_53 (utente non iscritto) data: 21/11/2013 16:48:37
Ciao Canapone (un grosso saluto)
Invito l'utente a spostare un files con adeguate spiegazioni.
Desidera eliminare/nascondere colonne OK
Desidera altro?. Potrebbe nell'allegato dirci cosa desidera ottenere nelle varie celle.
di Spyball (utente non iscritto) data: 21/11/2013 17:56:26
Grazie a tutti per l'impegno. I codici che mi avete consigliato purtroppo non funzionano.
Il mio obbiettivo è nascondere intere righe le cui celle siano tutte vuote e non eliminarle. (mi serve fare ciò per ridurre al minimo lo spazio occupato dalla tabella nel momento in cui la stamperò).
Come ho detto avendo una tabella che si sviluppa in un determinato range (G92:AQ786) piena di celle con numeri inseriti manualmente, vorrei che alla pressione del pulsante che ho creato, le righe completamente vuote siano nascoste (Es. se le celle da G93 a AQ93 sono tutte vuote, quella riga dovrà essere nascosta).
Vi allego un file di esempio molto ridotto rispetto a quello che userò ma quello che mi serve si capisce bene.
Grazie di nuovo
macro nasconti righe
di canapone data: 21/11/2013 18:16:53
Ciao,
cerco di aggirare il problema che nella colonna A - anche con riga vuota- un codice lo trova.
Ho messo un 1 al counta.
In attesa di migliori soluzioni
Saluti
Sub vadoanascondermi()
Application.ScreenUpdating = False
Dim RV As Range
Dim CELL As Range
Set RV = Application.Intersect(ActiveSheet.UsedRange, Range("B3:K19"))
For Each CELL In RV
If Application.CountA(CELL.EntireRow) = 1 Then CELL.EntireRow.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
|
allegato un esempio
di canapone data: 21/11/2013 18:22:42
Condivido il file dove ho fatto una prova veloce.
Saluti
di spyball (utente non iscritto) data: 21/11/2013 18:29:46
Ok grazie mille. Ho provato il file che mi hai allegato e funziona come vorrei. Domani mattina copio il codice che mi hai creato sul mio file che ho al lavoro e vi faccio sapere. Per ora di nuovo grazie.
macro nascondi righe g92 aq786
di canapone (utente non iscritto) data: 22/11/2013 07:14:01
Ciao,
ho allegato un nuovo file, mi sembra più presentabile.
Adatta i riferimenti - ho messo Foglio1 G92:AQ786- con i quali la macro deve lavorare.
Saluti
Option Explicit
Sub NASCONDIG92AQ786()
Application.ScreenUpdating = False
Dim i As Integer
Dim RStart As Range
Dim REnd As Range
Set RStart = Sheets("Foglio1").Range("G92")
Set REnd = Sheets("Foglio1").Range("G92").End(xlDown).Offset(0, 36)
Range(RStart, REnd).Select
On Error Resume Next
With Selection
.EntireRow.Hidden = False
For i = 1 To .Rows.Count
If WorksheetFunction.CountBlank(.Rows(i)) = 36 Then
.Rows(i).EntireRow.Hidden = True
End If
Next i
End With
Set RStart = Nothing
Set REnd = Nothing
Sheets("Foglio1").Range("g92").Select
Application.ScreenUpdating = True
End Sub
Sub MOSTRA92786()
Application.ScreenUpdating = False
Sheets("foglio1").Rows("92:786").EntireRow.Hidden = 0
Application.ScreenUpdating = True
End Sub
|
di Spyball (utente non iscritto) data: 22/11/2013 08:45:51
Ho provato ad aggiornare i riferimenti ma mi da un errore di debug su questa stringa:
Set RStart = Sheets("Foglio3").Range("G92")
Nel codice io ho solo sostituito "foglio1" con "foglio3" perchè nel mio file la tabella si trova nel foglio3.
Ho nuovamente allegato il file che tu hai creato per la simulazione e lo ho aggiornato esattamente come è la mia tabella.
Nella tua simulazione la macro funzionava perfettamente non riesco a capire dove sia il problema. Cmq. grazie!
di Grograman (utente non iscritto) data: 22/11/2013 08:59:28
Ciao!
Una sfoltita alla routine di Canapone eliminando un pò di select:
Option Explicit
Sub NASCONDIG92AQ786()
Dim ws As Worksheet
Dim i As Long
Set ws = ActiveSheet
Application.ScreenUpdating = False
With ws
i = .Range("G" & .Rows.Count).End(xlUp).Row
.Cells.EntireRow.Hidden = False
For i = i To 92 Step -1
If WorksheetFunction.CountBlank(.Range(Cells(i, 8), Cells(i, 43))) = 36 Then
.Rows(i).EntireRow.Hidden = True
End If
Next i
End With
Application.ScreenUpdating = True
Set ws = Nothing
End Sub
Sub MOSTRA92786()
Application.ScreenUpdating = False
Cells.EntireRow.Hidden = 0
Application.ScreenUpdating = True
End Sub
|
di Spyball (utente non iscritto) data: 22/11/2013 09:15:27
Ragazzi FUNZIONA!!! Grazie mille a tutti per l'impegno!
Vuoi Approfondire?