Bloccare celle dopo inseriment



  • Bloccare celle dopo inseriment
    di Mrshelby (utente non iscritto) data: 21/02/2011

    Salve ho bisogno di una macro excel che possa:

    1. bloccare le celle dopo l'inserimento del lavoro
    2. usi un campo sequenziale (aaaa100 se porto giu diventa aaaa101)
    3. abbia un campo data che riporta la data dell'inserimento.


    sul forum ho trovato questo codice:
    mi guida l'inserimento ma da la possibilità di cambiarne il valore quando è già presente(io vorrei l'inseirmento solo sui campi vuoti).

    non sono per nulla esperto di vbs quindi vi chiedo tutto l'aiuto possibile.

    grazie

     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    
    ActiveSheet.Unprotect Password:="pincopallino"
    Dim riga As Integer
    Dim colonna As Integer
    Dim dato As Variant
    Dim evento As Integer
    riga = ActiveCell.Row
    colonna = ActiveCell.Column
    dato = Application.InputBox("inserisi il dato")
    If dato = "" Then Exit Sub
    If dato = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    Select Case evento
    Case vbYes
    Cells(riga, colonna).Select
    ActiveCell = dato
    Selection.Locked = True
    ActiveSheet.Protect Password:="pincopallino"
    ActiveSheet.EnableSelection = xlUnlockedCells
    ActiveWorkbook.Save
    Case vbNo
    ActiveSheet.Protect Password:="pincopallino"
    End Select
    
    End Sub
    



  • di Albatros54 (utente non iscritto) data: 21/02/2011

    Ciao mrshelby
    siamo qui per cercare di alleviare e risolvere alcuni piccoli problemini, pero ancora non abbiamo ( almeno io)la sfera di cristallo che possiamo interrogare.
    cerca di essere il piu preciso possibile per poterci aiutare ad individuare il problema in modo da poterlo risolvere.
    i dati che prendi dalla inputbox dove li devi mettere?
    in colonne o righe?
    a partire da dove?
    i dati sono in una tabella?
    posta un file di esempio.
    ciao
    albatros54



  • di Mrshelby (utente non iscritto) data: 21/02/2011

    In pratica dovrebbe funzionare cosi:

    ho una tabella con questi campi:

    campo1 codice documento
    campo2 titolo
    campo3 preparatore
    campo4 data

    con il codice ho sistemato i campi 2-3-4 ma non riesco a sistemare il campo 1

    il campo 1 è un sequenziale: dovrei poter scendere la celletta e excel mi alimenta il valore di 1 (aaa00001 --> aaa00002)

    una volta inseriti tutti i valori, il tutto dovrebbe essere bloccato(quindi non si puo piu modificare nulla).

    secondo voi è possibile?????

    ah l'inserimento è su una riga.

    inserisco il codice che ho scritto fin'ora.

    grazie a tutti
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    
    ActiveSheet.Unprotect Password:="pinco"
    Dim riga As Integer
    Dim colonna As Integer
    Dim dato As Variant
    Dim dato1 As Variant
    Dim evento As Integer
    riga = ActiveCell.Row
    colonna = ActiveCell.Column
    dato = Application.InputBox("inserisci il Titolo")
    If dato = "" Then Exit Sub
    If dato = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    dato1 = Application.InputBox("inserisci il Preparatore")
    If dato1 = "" Then Exit Sub
    If dato1 = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    Select Case evento
    Case vbYes
    
    
    
    Cells(riga, 1).Value = Cells(riga - 1, 1).Value ' Da gestire il progressivo
    
    Cells(riga, 2).Select
    ActiveCell = dato
    Cells(riga, 3).Select
    ActiveCell = dato1
    Cells(riga, 4).Select
    ActiveCell = Now()
    
    ActiveSheet.Protect Password:="pinco"
    ActiveWorkbook.Save
    Case vbNo
    ActiveSheet.Protect Password:="pinco"
    End Select
    
    End Sub
    



  • di Albatros54 (utente non iscritto) data: 21/02/2011

    Incolla la macro postata nel foglio1
    ciao
    albatros54
     
    Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    ActiveSheet.Unprotect Password:="pinco"
    Dim riga As Integer
    Dim colonna As Integer
    Dim dato As Variant
    Dim dato1 As Variant
    Dim evento As Integer
    dato = Application.InputBox("inserisci il Titolo")
    If dato = "" Then Exit Sub
    If dato = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    dato1 = Application.InputBox("inserisci il Preparatore")
    If dato1 = "" Then Exit Sub
    If dato1 = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    Select Case evento
    Case vbYes
    lUltRiga = Foglio1.Range("A" & Foglio1.Rows.Count).End(xlUp).Row + 1
    Cells(lUltRiga, 1).Select
    incrementa = ActiveCell.Offset(-1, 0).Value + 1
    ActiveCell.Offset(0, 0).Value = incrementa
    ActiveCell.Offset(0, 1) = dato
    ActiveCell.Offset(0, 2) = dato1
    ActiveCell.Offset(0, 3) = Now()
    ActiveSheet.Protect Password:="pinco"
    ActiveWorkbook.Save
    Case vbNo
    ActiveSheet.Protect Password:="pinco"
    End Select
    
    End Sub
    



  • di Mrshelby (utente non iscritto) data: 22/02/2011

    E' perfetto!!!!!!!!!!!
    i miei complimenti.
    solo un'ultima domanda:
    se il valore da incrementare fosse non un numerico ma un alfa-numerico cambierebbe qualcosa???????????

    grazie ancora

    gianluca



  • di Albatros54 (utente non iscritto) data: 22/02/2011

    In questo caso ti darebbe errore, e si dovrebbe implementare il codice.
    ciao
    albatros54



  • di Mrshelby (utente non iscritto) data: 22/02/2011

    Complicato????????????
    ho posso anche riuscirci da solo???????
    in pratica deve fare cosi: il codice documento è eprit00001 incrementarlo eprit0000n.

    grazie



  • di Albatros54 (utente non iscritto) data: 22/02/2011

    Prova con il codice sotto.
    fai sapere
    ciao
    albatros54
     
    Public Sub b()
    ActiveSheet.Unprotect Password:="pinco"
    Dim riga As Integer
    Dim colonna As Integer
    Dim dato As Variant
    Dim dato1 As Variant
    Dim evento As Integer
    dato = Application.InputBox("inserisci il Titolo")
    If dato = "" Then Exit Sub
    If dato = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    dato1 = Application.InputBox("inserisci il Preparatore")
    If dato1 = "" Then Exit Sub
    If dato1 = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    Select Case evento
    Case vbYes
    lUltRiga = Foglio1.Range("A" & Foglio1.Rows.Count).End(xlUp).Row + 1
    Cells(lUltRiga, 1).Select
    stringa = Cells(lUltRiga - 1, 1).Value
    cont = ""
    For N = 1 To Len(stringa)
    If Mid(stringa, N, 1) <= "9" And Mid(stringa, N, 1) >= "0" Then
    cont = cont & Mid(stringa, N, 1)
    End If
    Next
    cont = cont + 1
    Mid(stringa, N - 1, 1) = cont
    ActiveCell.Offset(0, 0).Value = stringa
    ActiveCell.Offset(0, 1) = dato
    ActiveCell.Offset(0, 2) = dato1
    ActiveCell.Offset(0, 3) = Now()
    ActiveSheet.Protect Password:="pinco"
    ActiveWorkbook.Save
    Case vbNo
    ActiveSheet.Protect Password:="pinco"
    End Select
    
    End Sub
    



  • di Mrshelby (utente non iscritto) data: 22/02/2011

    Si direi che funziona sempre bene ma mi si blocca al 9 (da eprit000009 torna a eprit000001).

    sono qui con uno che mastica il linguaggio più di me solo che non capiamo bene come funziona il ciclo for.

    ci puoi aiutare?



  • di Albatros54 (utente non iscritto) data: 23/02/2011

    Prova il codice postato dovrebbe andare.
    fai sapere
    ciao
    albatros54
     
    Public Sub b()
    ActiveSheet.Unprotect Password:="pinco"
    Dim riga As Integer
    Dim colonna As Integer
    Dim m As Integer
    Dim dato As Variant
    Dim dato1 As Variant
    Dim evento As Integer
    dato = Application.InputBox("inserisci il Titolo")
    If dato = "" Then Exit Sub
    If dato = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    dato1 = Application.InputBox("inserisci il Preparatore")
    If dato1 = "" Then Exit Sub
    If dato1 = 0 Then Exit Sub
    evento = MsgBox("sei sicuro di voler confermare? si ricorda che non è + possibile modificare!", vbYesNo)
    Select Case evento
    Case vbYes
    lUltRiga = Foglio1.Range("A" & Foglio1.Rows.Count).End(xlUp).Row + 1
    Cells(lUltRiga, 1).Select
    stringa = Cells(lUltRiga - 1, 1).Value
    cont = ""
    'ciclo la lunghezza della stringa
    For n = 1 To Len(stringa)
    'se il carattere trovato e' un numero lo memorizzo nella variabile cont
    If Mid(stringa, n, 1) <= "9" And Mid(stringa, n, 1) >= "0" Then
    'nella variabile cont ho ilnumero in stringa
    cont = cont & Mid(stringa, n, 1)
    End If
    Next
    'trasformo in  numero e sommo 1
    cont = Val(cont + 1)
    'prendo la lungheza del numero
    conta = Len(cont)
    'sostituisco in stringa , a partire dal carattere n-conta, la lunghezza conta con il valore cont
    Mid(stringa, n - conta, conta) = cont
    ActiveCell.Offset(0, 0).Value = stringa
    ActiveCell.Offset(0, 1) = dato
    ActiveCell.Offset(0, 2) = dato1
    ActiveCell.Offset(0, 3) = Now()
    ActiveSheet.Protect Password:="pinco"
    ActiveWorkbook.Save
    Case vbNo
    ActiveSheet.Protect Password:="pinco"
    End Select
    
    End Sub