Ovviamente le opzioni (aumentare l’altezza di righe / inserire una riga) sono alternative, devi scegliere se attuare l’una o l’altra.
Per variare l’altezza di una riga a seconda che la colonna A di quella riga sia vuota o piena:
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'Imposta altezza se Celle non vuote
'
Dim ckArea As String, defH As Single, enhH As Single
Dim myArea As Object, myC As Range
'
'Imposta i parametri:
ckArea = "A1:A100" '<<< L'area da esaminare
defH = 22 '<<< L'Altezza in pixel se cella vuota
enhH = 44 '<<< . . . . . . . . . .se cella piena
'
Set myArea = Application.Intersect(Target, Range(ckArea))
If Not myArea Is Nothing Then
For Each myC In myArea
If myC.Value = "" Then
myC.EntireRow.RowHeight = defH
Else
myC.EntireRow.RowHeight = enhH
End If
Next myC
End If
End Sub
Le righe marcate <<< sono da personalizzare come da commento
Per inserire/togliere riga:
- Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'Aggiunge /Toglie riga vuota prima di Target
' USARE CON CAUTELA
'
Dim ckArea As String, defH As Single, enhH As Single
Dim myArea As Object, myC As Range
'
'Imposta i parametri:
''ckArea = "A1:A100" '<<< L'area da esaminare NO: Vedi TESTO
'
Set myArea = Application.Intersect(Target, Range("ckArea"))
If Not myArea Is Nothing Then
Application.EnableEvents = False
For Each myC In myArea
If myC.Value = "" Then
If Application.WorksheetFunction.CountA(myC.Offset(-1, 0).EntireRow) = 1 And _
myC.Offset(-1, 0).Value = " . " Then
myC.Offset(-1, 0).EntireRow.Delete Shift:=xlUp
Else
Beep
End If
Else
If myC.Offset(-1, 0).Value <> " . " Then
myC.EntireRow.Insert Shift:=xlDown
myC.Offset(-1, 0).Value = " . " 'Marker di riga aggiunta
End If
End If
Next myC
Application.EnableEvents = True
End If
End Sub
Come avrai notato non viene usato il valore di ckArea per definire l’area da esaminare; perche’ man mano che aggiungi righe l’area dovrebbe essere aggiornata. Si potrebbe fare via macro, ma il mio suggerimento e’ che nel foglio di lavoro crei un intervallo a cui assegni il nome ckArea:
-selezioni A1:A100 (se questa e’ l’area su cui si vuol lavorare); nella “Casella Nome” di Excel (quella che si trova a sinistra della “Barra delle Formula” e che normalmente contiene l’indirizzo della cella) scrivi
ckArea e premi Enter
In questo modo quando eventualmente inserisci e togli righe l’intervallo di lavoro viene automaticamente allungato /accorciato.
Per evitare di cancellare righe non volute o di aggiungerne piu’ di una, la colonna A della riga aggiunta viene compilata col valore “ . “ (spazio-punto-spazio) e uso questo contenuto per decidere cosa fare (evitare di cancellare righe in modo indesiderato ed evitare di inserire piu’ righe modificando la stessa cella piu’ volte
Ambedue le macro sono di tipo “WorkSheet-Change”, una o l’altra va inserita nel “modulo vba del foglio su cui lavori”. Per fare questo:
-tasto dx sul tab col nome del foglio di lavoro; seleziona Visualizza codice; copia il codice e incollalo nella pagina del vba che si e’ aperta.
-modifica le righe da personalizzare
Poi torna sul foglio excel e prova
TUTTE LE PROVE DA FARE SU UNA COPIA DEL VERO FILE