› Sviluppare funzionalita su Microsoft Office con VBA › modifica macro per eliminare righe selezionate
-
AutoreArticoli
-
Ciao,
nel workbook allegato ci sono 2 macro
Sub EliminaRiga_1() per selezionare 1 riga ed eliminarala
Sub EliminaRiga_1() per selezionare più righe ed eliminarle.
Funziona quasi bene.
Un piccolo problema: se è rimasto solo 1 riga da eliminare, la numero 3, e poi clicco nel pulsante giallo "elimina 1 riga selezionata" mi sballa tutto il foglio.
Lo stesso per il pulsante "elimina righe selezionate".
Un aiuto per correggere?
Grazie
Allegati:
You must be logged in to view attached files.Non è che "sballa tutto", in realtà dopo aver eliminato la prima riga il cursore viene fatto saltare alla prima riga disponibile dopo l'intestazione e quindi aggiunge una riga (allargandola perchè assume la formattazione della prima riga). Secondo me puoi cavartela con un semplice test sul numero di riga, se è
maggioreminore di 3 non deve fare niente.Rows(n).EntireRow.Delete 'elimina solo una riga
<strong>If n > 3 Then</strong> Range("A" & Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Insert
Ma più che altro mi domando...a che cosa serve inserire un nuovo rigo sotto l'ultima cella compilata in colonna "A"? Già è presente un ennesimo rigo.
Poi le 2 Routine sono praticamente simili tra loro. Una elimina solo 1 rigo, l'altra elimina le righe selezionate ma allo stesso tempo anche solo 1 rigo. Quindi non hai bisogno della Sub EliminaRiga_1()
Secondo me basta solo questa per entrambi gli scopi:
Option Explicit Sub EliminaRiga_2() Dim X As Long, Ros As Long Dim avviso As String Dim s As String, r As Range For Each r In Selection.Rows If r.Row < 3 Then avviso = MsgBox("Sign. < " & Environ("UserName") & " >" & Chr(13) & " " & Chr(13) & _ "le prime 2 righe non si possono eliminare!", vbOKOnly + vbCritical, "ELIMINA RIGHE!") Exit Sub End If s = s & "-" & r.Row Ros = Ros + 1 Next r avviso = MsgBox("Sign. < " & Environ("UserName") & " >" & Chr(13) & " " & Chr(13) & _ "Vuoi eliminare la/le riga/ghe " & vbCrLf & " < " & _ Mid(s, 2) & " > " & vbCrLf & "selezionata/te?", vbYesNo + vbInformation, "ELIMINA RIGHE!") If avviso = vbNo Then Exit Sub ActiveSheet.Unprotect "123456" Application.EnableEvents = False Selection.EntireRow.Delete 'elimina più di una riga Cells(ActiveCell.Row, 1).Select ActiveSheet.Protect "123456" Application.EnableEvents = True End Sub
N.B. Se scrivi Dim s, r As Range la variabile s viene dichiarata come Variant. Ma tu sai già che deve essere String
Poi il controllo che stai selezionando le righe non funziona a dovere. Prova a selezionare dal rigo, per esempio 5, e sali al primo rigo e poi lancia la Sub che elimina le righe selezionate....e vedi che succede!!!
Seconde me devi modificarlo così come ti indico in questo esempio.
Allegati:
You must be logged in to view attached files.Grazie vecchio frac
Grazie vecchio frac
Ma è Alex che ha risposto
Grazie ad entrambi
-
AutoreArticoli