Sviluppare funzionalita su Microsoft Office con VBA modifica macro per eliminare righe selezionate

Login Registrati
Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
  • Autore
    Articoli
  • #46083 Score: 0 | Risposta

    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.
    #46085 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      248 pts

      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 è maggiore minore 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

      #46087 Score: 0 | Risposta

      alexps81
      Moderatore
        30 pts

        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.
        #46089 Score: 0 | Risposta

        Grazie vecchio frac

        #46090 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          248 pts

          frank_ciccio ha scritto:

          Grazie vecchio frac

          Ma è Alex che ha risposto   

          #46092 Score: 0 | Risposta

          Grazie ad entrambi      

        Login Registrati
        Stai vedendo 6 articoli - dal 1 a 6 (di 6 totali)
        Rispondi a: modifica macro per eliminare righe selezionate
        Gli allegati sono permessi solo ad utenti REGISTRATI
        Le tue informazioni: