Risultati da 1 a 10 di 10

Discussione: Codice VBA per bloccare le righe appena compilate



  1. #1
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Codice VBA per bloccare le righe appena compilate

    Buonasera !

    Qui di seguito trovate un codice VBA con cui aggiungo il CAP vicino la città.
    Dato che i dati sono precisi e non ho bisogno di successive modifiche, ho bisogno che quando digito TAB per avere un'altra riga della tabella, i dati in precedenza inseriti non siano più modificabili.
    Cioè se dalla riga due alla riga nove ho inserito tutti i dati, poi digito TAB ed ottengo la riga 10, ed il codice mi deve bloccare le prime nove righe.

    Codice: 
     
    Private Sub cmdInserisciCap_Click()    Dim intColonna As Integer
        Dim blnTrovato As Boolean
        Dim y As Integer
        Dim intNumCelle As Integer
        
        On Error Resume Next
        
        
        intNumCelle = Worksheets("RIEPILOGATIVO").Range("E2").End(xlDown).Row + 1
        intColonna = ActiveCell.Column
            If intColonna <> 5 Then
                MsgBox "Attenzione, il CAP va inserito nella colonna E"
            Else
                blnTrovato = False
                y = 1
            Do Until blnTrovato = True Or y = intNumCelle
                If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then
                    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
                    ActiveCell.NumberFormat = "@"
                    ActiveCell.Errors.Item(xlNumberAsTesxt).Ignore = True
                    blnTrovato = True
                End If
                y = y + 1
            Loop
            
                If blnTrovato = False Then
                    MsgBox "Comune non in elenco"
                End If
            End If
            Exit Sub
    
    
    Errore:     MsgBox "si è verificato un errore"
    Exit Sub
    
    
    End Sub
    Come è modificabile questo codice ?

    Saluti.
    File Allegati File Allegati

  2. #2

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2833
    Versione Office
    Excel 2013
    Likes ricevuti
    1027
    Likes dati
    983

    Re: Codice VBA per bloccare le righe appena compilate

    Se ho capito bene basta aggiungere un rigo:
    Codice: 
    Private Sub cmdInserisciCap_Click()
        Dim intColonna As Integer
        Dim blnTrovato As Boolean
        Dim y As Integer
        Dim intNumCelle As Integer
        
        On Error Resume Next
        
        intNumCelle = Worksheets("RIEPILOGATIVO").Range("E2").End(xlDown).Row + 1
        intColonna = ActiveCell.Column
            If intColonna <> 5 Then
                MsgBox "Attenzione, il CAP va inserito nella colonna E"
            Else
                If ActiveCell <> "" Then Exit Sub
                blnTrovato = False
                y = 1
                Do Until blnTrovato = True Or y = intNumCelle
                    If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then
                        ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
                        ActiveCell.NumberFormat = "@"
                        ActiveCell.Errors.Item(xlNumberAsTesxt).Ignore = True
                        blnTrovato = True
                    End If
                    y = y + 1
                Loop
            
                If blnTrovato = False Then
                    MsgBox "Comune non in elenco"
                End If
            End If
            Exit Sub
    
    
    Errore:     MsgBox "si è verificato un errore"
    Exit Sub
    
    
    End Sub
    P.S. Con un WorksheetFunction.VLookup facevi prima

  3. #3
    L'avatar di GiuseppeMN
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Mantova
    Messaggi
    864
    Versione Office
    2000 - 2013
    Likes ricevuti
    285
    Likes dati
    160

    Re: Codice VBA per bloccare le righe appena compilate

    Buona giornata Rubik;
    visto che io avevo capito che:
    ... i dati in precedenza inseriti non siano più modificabili. ...
    avevo pensato ad una procedura diversa:

    Seleziona tutte le Celle del Foglio
    - Formato Celle, Protezione, Togli il Flag da "Bloccata"

    Prova questo Codice:
    Codice: 
    Private Sub cmdInserisciCap_Click()
        Dim intColonna As Integer
        Dim blnTrovato As Boolean
        Dim y As Integer
        Dim intNumCelle As Integer
        
        On Error Resume Next
        
        
        intNumCelle = Worksheets("RIEPILOGATIVO").Range("E2").End(xlDown).Row + 1
        intColonna = ActiveCell.Column
            If intColonna <> 5 Then
                MsgBox "Attenzione, il CAP va inserito nella colonna E"
            Else
                blnTrovato = False
                y = 1
            Do Until blnTrovato = True Or y = intNumCelle
                If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then
                    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
                    ActiveCell.NumberFormat = "@"
                    ActiveCell.Errors.Item(xlNumberAsTesxt).Ignore = True
                    blnTrovato = True
                End If
                y = y + 1
            Loop
                ActiveSheet.Unprotect
                    Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5)).Locked = True
                ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                If blnTrovato = False Then
                    MsgBox "Comune non in elenco"
                End If
            End If
            Exit Sub
    
    Errore:     MsgBox "si è verificato un errore"
    Exit Sub
    
    End Sub

    A disposizione.

    Buona serata.

    Giuseppe
    Windows XP Excel 2000 - Windows 10 Excel 2013

  4. I seguenti utenti hanno dato un "Like"


  5. #4
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Re: Codice VBA per bloccare le righe appena compilate

    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    Se ho capito bene basta aggiungere un rigo: If ActiveCell <> "" Then Exit Sub

    P.S. Con un WorksheetFunction.VLookup facevi prima
    Questa istruzione non funziona.


    Citazione Originariamente Scritto da GiuseppeMN Visualizza Messaggio
    Buona giornata Rubik;
    visto che io avevo capito che:

    avevo pensato ad una procedura diversa:

    Seleziona tutte le Celle del Foglio
    - Formato Celle, Protezione, Togli il Flag da "Bloccata"

    Prova questo Codice:
    Codice: 
    Private Sub cmdInserisciCap_Click()
        Dim intColonna As Integer
        Dim blnTrovato As Boolean
        Dim y As Integer
        Dim intNumCelle As Integer
        
        On Error Resume Next
        
        
        intNumCelle = Worksheets("RIEPILOGATIVO").Range("E2").End(xlDown).Row + 1
        intColonna = ActiveCell.Column
            If intColonna <> 5 Then
                MsgBox "Attenzione, il CAP va inserito nella colonna E"
            Else
                blnTrovato = False
                y = 1
            Do Until blnTrovato = True Or y = intNumCelle
                If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then
                    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
                    ActiveCell.NumberFormat = "@"
                    ActiveCell.Errors.Item(xlNumberAsTesxt).Ignore = True
                    blnTrovato = True
                End If
                y = y + 1
            Loop
                ActiveSheet.Unprotect
                    Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5)).Locked = True
                ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
                If blnTrovato = False Then
                    MsgBox "Comune non in elenco"
                End If
            End If
            Exit Sub
    
    Errore:     MsgBox "si è verificato un errore"
    Exit Sub
    
    End Sub

    A disposizione.

    Buona serata.

    Giuseppe
    Per quanto riguarda questo codice, mi blocca le celle appena compilate ma poi quando digito, nell'ultima cella in basso a destra della tabella, il tasto TAB per avere un nuovo rigo, non succede nulla. Ho le celle della tabella bloccate, ma poi devo aggiungere nuovi righi nella tabella.

  6. #5
    L'avatar di GiuseppeMN
    Clicca e Apri
    Data Registrazione
    Oct 2015
    Località
    Mantova
    Messaggi
    864
    Versione Office
    2000 - 2013
    Likes ricevuti
    285
    Likes dati
    160

    Re: Codice VBA per bloccare le righe appena compilate

    Citazione Originariamente Scritto da ProgrammD69 Visualizza Messaggio
    Per quanto riguarda questo codice, mi blocca le celle appena compilate ma poi quando digito, nell'ultima cella in basso a destra della tabella, il tasto TAB per avere un nuovo rigo, non succede nulla. Ho le celle della tabella bloccate, ma poi devo aggiungere nuovi righi nella tabella.
    Ovviamente, se il foglio è protetto, il tasto TAB non può funzionare.

    Serve un Evento che:
    - sblocchi il Foglio di lavoro
    - esegua il tasto TAB
    - blocchi il Foglio di lavoro
    Windows XP Excel 2000 - Windows 10 Excel 2013

  7. #6
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    823
    Versione Office
    2016 64bit
    Likes ricevuti
    150
    Likes dati
    55

    Re: Codice VBA per bloccare le righe appena compilate

    Ho ripulito un po' il codice presente ed applicato alcuni suggerimenti fatti. Naturalmente si parte sempre da una Tabella vuota formata da una sola riga vuota altrimenti la successiva protezione va a farsi benedire e le 5 colonne vanno formattate con protezione non Bloccata. Vedi se può andar bene.
    Codice: 
    Option Explicit
    
    Private Sub cmdInserisciCap_Click()
    
        Dim intColonna As Integer
        Dim blnTrovato As Boolean
        Dim y As Integer
        Dim intNumCelle As Integer
        
        intNumCelle = Worksheets("RIEPILOGATIVO").Range("E2").End(xlDown).Row + 1
        intColonna = ActiveCell.Column
        If intColonna <> 5 Then
            MsgBox "Attenzione, il CAP va inserito nella colonna E"
        Else
            blnTrovato = False
            y = 1
            Do
                If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then
                    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
                    blnTrovato = True
                    ActiveSheet.Unprotect
                    Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5)).Locked = True
                    ActiveCell.ListObject.ListRows.Add
                    ActiveSheet.Protect
                End If
                y = y + 1
            Loop Until blnTrovato = True Or y = intNumCelle
            If blnTrovato = False Then
                MsgBox "Comune non in elenco"
            End If
        End If
        ActiveCell.Select
    
    End Sub

  8. #7
    ProgrammD69
    Ospite L'avatar di ProgrammD69

    Re: Codice VBA per bloccare le righe appena compilate

    In corrispondenza di:
    Codice: 
     
    If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then                ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
                    blnTrovato = True
                    ActiveSheet.Unprotect
                    Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5)).Locked = True
                    ActiveCell.ListObject.ListRows.Add
                    ActiveSheet.Protect
    esce il seguente errore:
    "Errore di run-time 91
    Variabile oggetto o variabile del blocco With non impostata"

    Comunque il dato del CAP me lo riporta in colonna E, ma esce il Debug.

    ----------Post unito in automatico----------

    Ho cancellato l'istruzione VBA in rosso, ed ora funziona.
    Resta solo da cambiare il fatto che il tasto TAB, per avere una nuova riga, dopo l'inserimento del CAP, non dev'essere bloccato.

  9. #8
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    823
    Versione Office
    2016 64bit
    Likes ricevuti
    150
    Likes dati
    55

    Re: Codice VBA per bloccare le righe appena compilate

    Hai tolto la riga che serve proprio a quello !

    Tutto quello che posso fare è allegarti il file con la mia versione di macro che riporto con una piccola modifica che non riguarda l'errore 91 (che non riesco a replicare).
    Codice: 
    Option Explicit
    
    
    Private Sub cmdInserisciCap_Click()
    
    
        Dim intColonna As Integer
        Dim blnTrovato As Boolean
        Dim y As Integer
        Dim intNumCelle As Integer
        
        intNumCelle = Worksheets("RIEPILOGATIVO").Range("E2").End(xlDown).Row + 1
        intColonna = ActiveCell.Column
        If intColonna <> 5 Then
            MsgBox "Attenzione, il CAP va inserito nella colonna E"
        Else
            blnTrovato = False
            y = 1
            Do
                If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then
                    If ActiveCell <> "" Then GoTo fine
                    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
                    blnTrovato = True
                    ActiveSheet.Unprotect
                    Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5)).Locked = True
                    ActiveCell.ListObject.ListRows.Add
                    ActiveSheet.Protect
                End If
                y = y + 1
            Loop Until blnTrovato = True Or y = intNumCelle
            If blnTrovato = False Then
                MsgBox "Comune non in elenco"
            End If
        End If
    fine:
        ActiveCell.Select
    
    
    End Sub
    File Allegati File Allegati

  10. #9

    L'avatar di Rubik72
    Clicca e Apri
    Data Registrazione
    Dec 2015
    Località
    Cosenza
    Età
    45
    Messaggi
    2833
    Versione Office
    Excel 2013
    Likes ricevuti
    1027
    Likes dati
    983

    Re: Codice VBA per bloccare le righe appena compilate

    Citazione Originariamente Scritto da rollis13 Visualizza Messaggio
    [...]

    Private Sub cmdInserisciCap_Click()


    Dim intColonna As Integer
    Dim blnTrovato As Boolean
    Dim y As Integer
    Dim intNumCelle As Integer

    intNumCelle = Worksheets("RIEPILOGATIVO").Range("E2").End(xlDown).Row + 1
    intColonna = ActiveCell.Column
    If intColonna <> 5 Then
    MsgBox "Attenzione, il CAP va inserito nella colonna E"
    Else
    blnTrovato = False
    y = 1
    Do
    If UCase(Worksheets("RIEPILOGATIVO").Range("A" & y)) = UCase(ActiveCell.Offset(0, -1)) Then
    If ActiveCell <> "" Then GoTo fine
    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
    blnTrovato = True
    ActiveSheet.Unprotect
    Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, 5)).Locked = True
    ActiveCell.ListObject.ListRows.Add
    ActiveSheet.Protect
    End If
    y = y + 1
    Loop Until blnTrovato = True Or y = intNumCelle
    If blnTrovato = False Then
    MsgBox "Comune non in elenco"
    End If
    End If
    fine:
    ActiveCell.Select


    End Sub[/CODE]
    Modifica già fatta da me al post #2

    Un appunto su questa routine: il comando UnProtect va messo prima della riga:
    Codice: 
    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
    altrimenti non si può scrivere in una cella protetta

    oppure si può usare il comando Protect con argomento:
    Codice: 
    foglio1.Protect  UserInterfaceOnly:=True
    per consentire solo al VBA di scrivere in celle protette

  11. #10
    L'avatar di rollis13
    Clicca e Apri
    Data Registrazione
    Nov 2015
    Località
    Cordenons
    Messaggi
    823
    Versione Office
    2016 64bit
    Likes ricevuti
    150
    Likes dati
    55

    Re: Codice VBA per bloccare le righe appena compilate

    Citazione Originariamente Scritto da Rubik72 Visualizza Messaggio
    Modifica già fatta da me al post #2
    Esatto, avevo già detto che le modifiche apportate erano già state suggerite.

    Un appunto su questa routine: il comando UnProtect va messo prima della riga:
    Codice: 
    ActiveCell.Value = Worksheets("RIEPILOGATIVO").Range("E" & y)
    altrimenti non si può scrivere in una cella protetta[/CODE]
    L'Unprotect può anche essere anticipato ma inutilmente, in quel momento le celle di quella riga non sono ancora state protette; l'Unprotect servirà solo nel momento che si va ad aggiungere una nuova riga alla tabella.

    Ma tant'è, il codice originale era già molto pasticciato e sicuramente frutto di molti Copia/Incolla ed adattamenti da altre routine.

Discussioni Simili

  1. [Risolto] Bloccare contorno
    Di sergiogranero nel forum Domande sul Microsoft Word
    Risposte: 5
    Ultimo Messaggio: 09/11/16, 09:56
  2. Risposte: 6
    Ultimo Messaggio: 23/10/16, 18:02
  3. Macro per rinominare una cartella appena duplicata
    Di Gambadilegno nel forum Domande su Excel VBA e MACRO
    Risposte: 5
    Ultimo Messaggio: 26/03/16, 11:09
  4. [Risolto] Funzione se + condizioni
    Di GIMMI nel forum Domande su Excel in generale
    Risposte: 6
    Ultimo Messaggio: 07/02/16, 20:23
  5. test Code Tags and BB Code : testare codice Tag e codice BB
    Di Doc.AElstein nel forum Test dei vostri post
    Risposte: 8
    Ultimo Messaggio: 11/07/15, 17:15

Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •