macro foglio protetto



  • macro foglio protetto
    di giancarlo (utente non iscritto) data: 19/08/2013 11:26:49

    Non riesco a far eseguire la macro sul foglio protetto. La password della protezione del foglio è "croci"
    Vorrei sapere anche come poter inserire quanto sotto insieme a una macro su un nuovo foglio di excel.

    Option Explicit

    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim dblTot As Double
    Dim wsList As Worksheet, wsTot As Worksheet

    Application.EnableEvents = 0
    If Sh.Name <> "Listino" And Sh.Name <> "TOTALI" Then
    If Target.Column = 2 Then
    Set wsTot = ThisWorkbook.Sheets("TOTALI")
    Set wsList = ThisWorkbook.Sheets("Listino")
    With Target
    dblTot = wsTot.Cells(.Row, .Column)
    If dblTot > wsList.Cells(.Row, .Column) Then
    MsgBox "Totale per " & wsTot.Cells(.Row, .Column).Offset(0, -1).Value & " superato."
    .ClearContents
    .Select
    Else
    MsgBox "Disponibili altri " & wsList.Cells(.Row, .Column) - dblTot & " " & wsTot.Cells(.Row, .Column).Offset(0, -1)
    End If
    End With
    Set wsTot = Nothing
    Set wsList = Nothing
    End If
    End If
    Application.EnableEvents = 1
    End Sub



  • di Grograman data: 19/08/2013 13:24:16

    Ci ho messo più a capire che avevi postato la macro SBAGLIATA che non qual'era il problema...

    Quella che non va a foglio protetto NON è quella pubblicata.
    Ed è SEMPRE buona norma dire QUALE ERRORE viene restituito e su QUALE RIGA DI CODICE.
     
    Sub Stampa_Scheda()
    
    ' Rimuovo i filtri se presenti nel foglio
      If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
      ActiveSheet.Unprotect "croci"  'RIMUOVERE PROTEZIONE SE SI VUOLE AGIRE SUELLE CELLE
    ' Cerco l'ultima riga da stampare
      Riga = Columns("A:D").Find("*", , xlFormulas, , xlRows, xlPrevious).Row
    
    ' Scopro tutte le righe nascoste
      Cells.EntireRow.Hidden = False
    
    ' Cerco i valori Zero nella quarta colonna
    ' Nascondo le righe trovate
      For ciclo = 3 To Riga
        If Not IsEmpty(Cells(ciclo, 4).Value) Then
          If Cells(ciclo, 4).Value = 0 Then
            Rows(ciclo).EntireRow.Hidden = True
          End If
        End If
      Next
    
    ' Imposto l'area di stampa
      ActiveSheet.PageSetup.PrintArea = "$A$1:$D$" & Riga
    
    ' Stampo il foglio
      ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
      ActiveSheet.Protect "croci" 'RIMETTERE PROTEZIONE
    End Sub



  • di giancarlo (utente non iscritto) data: 19/08/2013 13:43:50

    Scusami Grograman delle informazioni incomplete.
    Riguardo al comando che avevo invece scritto nel messaggio, che poi era il tuo, mi spieghi perchè non lo vedo tra le macro e come inserirlo su un nuovo foglio.

    grazie



  • di giancarlo (utente non iscritto) data: 19/08/2013 13:53:42

    Sempre per Grograman.
    Riguardo alla macro che mi hai postato funziona anche sui fogli protetti, ma se lanciata su un foglio non protetto al termine questo risulta come protetto. Non sarebbe possibile che restasse editabile.



  • di Grograman data: 19/08/2013 14:37:54

    Per quanto riguarda il non vederlo tra le macro è perchè essendo legato agli eventi di cambio foglio quel codice va messo non in un modulo generico, ma nel modulo di classe "Thisworkbook" ("Questa_cartella_di_lavoro" nella versione italiana). Lo vedi sempre nell'editor VBA tra i progetti, sotto "microsoft ecel oggetti".

    Invece per saltare la protezione in caso il foglio sia libero, un modo può essere ricorrere ad una variabile booleana (vero/falso) da accendere solo se il foglio è già protetto.
     
    Sub Stampa_Scheda()
    Dim blnProt As Boolean
    If ActiveSheet.ProtectContents = True Then blnProt = 1
    ' Rimuovo i filtri se presenti nel foglio
      If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData
      ActiveSheet.Unprotect "croci"
    ' Cerco l'ultima riga da stampare
      Riga = Columns("A:D").Find("*", , xlFormulas, , xlRows, xlPrevious).Row
    
    ' Scopro tutte le righe nascoste
      Cells.EntireRow.Hidden = False
    
    ' Cerco i valori Zero nella quarta colonna
    ' Nascondo le righe trovate
      For ciclo = 3 To Riga
        If Not IsEmpty(Cells(ciclo, 4).Value) Then
          If Cells(ciclo, 4).Value = 0 Then
            Rows(ciclo).EntireRow.Hidden = True
          End If
        End If
      Next
    
    ' Imposto l'area di stampa
      ActiveSheet.PageSetup.PrintArea = "$A$1:$D$" & Riga
    
    ' Stampo il foglio
     ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
     If blnProt Then ActiveSheet.Protect "croci"
    End Sub



  • di giancarlo (utente non iscritto) data: 19/08/2013 16:32:43

    Grazie, non saprei come fare senza il Vs aiuto.