È soltanto un Pokémon con le armi o è un qualcosa di più? Vieni a parlarne su Award & Oscar!

Excel Forum Per condividere esperienze su Microsoft Excel

Proteggere più fogli contemporaneamente

  • Messaggi
  • OFFLINE
    Rosario1959
    Post: 197
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 06/05/2015 23:23
    Salve e buona serata a tutti, avrei un piccolo problema con una macro che mi aggiorna 12 fogli mensili, i fogli sono protetti senza password avrei la necessita di sproteggere i fogli e riproteggerli alla fine dell’esecuzione della macro, ho provato con “ActiveSheet.Unprotect” dopo: “With Sheets(aMese)” ma non funziona, quale sarebbe il modo corretto? Grazie in anticipo per l’aiuto e buona serata a tutto il forum

    Sub Aggiornamesi()
    Application.ScreenUpdating = False
    Dim aAnno As Variant
    Dim aMese As Variant
    aAnno = Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Sett", "Ott", "Nov", "Dic")
    
    For Each aMese In aAnno
        With Sheets(aMese)
    
    codice.....
    ..............
    
    End Sub
    
    Excel 2002 - 2007
  • OFFLINE
    dodo47
    Post: 48
    Registrato il: 06/04/2013
    Utente Junior
    2010
    00 07/05/2015 08:32
    Ciao
    leggi questo 3D:

    discussione

    saluti
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    rossi1975
    Post: 113
    Registrato il: 02/08/2014
    Città: MILANO
    Età: 49
    Utente Junior
    excel 2010
    00 07/05/2015 13:02
    Ciao Rosario prova con questa macro:



    Sub Auto_open()
    
    Application.ScreenUpdating = False
    
        Dim ws As Worksheet
        For Each ws In ThisWorkbook.Worksheets
        ws.Protect , userinterfaceonly:=True
        Next ws
    
    Application.ScreenUpdating = True
    
    End Sub
    


    con questo comando "userinterfaceonly:=True" non c'è bisogno di protegge e sproteggere i fogli ogni volta che si esegue una macro.

    Saluti.
    [Modificato da rossi1975 07/05/2015 14:56]
  • OFFLINE
    rossi1975
    Post: 115
    Registrato il: 02/08/2014
    Città: MILANO
    Età: 49
    Utente Junior
    excel 2010
    00 07/05/2015 14:57
    c'era un errore nella macro precedente e l'ho modificata... ora è ok.
  • OFFLINE
    Rosario1959
    Post: 197
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 07/05/2015 15:13
    Buona giornata a tutti, grazie a dodo e rossi per l’interessamento, quello di dodo sul mio pc non visualizzo il link (non so se sia a causa del pc oppure non sia stato caricato nel forum) e non ho potuto leggere il suggerimento, ho provato il suggerimento di rossi ma non va continua a darmi “Errore di run-time 1004 La cella o il grafico è protetto quindi di sola lettura”, ho provato così:

    Application.ScreenUpdating = False
    Dim ws As Worksheet
        For Each ws In Worksheets
        ActiveSheet.Protect , userinterfaceonly:=True
    Dim aAnno As Variant
    Dim aMese As Variant
    aAnno = Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Sett", "Ott", "Nov", "Dic")
    
    For Each aMese In aAnno
        With Sheets(aMese)


    E così:

    Application.ScreenUpdating = False
    ActiveSheet.Protect , userinterfaceonly:=True
    Dim aAnno As Variant
    Dim aMese As Variant
    aAnno = Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Sett", "Ott", "Nov", "Dic")
    
    For Each aMese In aAnno
        With Sheets(aMese)
    ActiveSheet.Protect , userinterfaceonly:=True



    ma niente, forse sbaglio io? Grazie ancora per l’aiuto e buona giornata a tutto il forum
    Excel 2002 - 2007
  • OFFLINE
    GiuseppeMN
    Post: 1.830
    Registrato il: 03/04/2013
    Utente Veteran
    Excel 2000 - 2013
    00 07/05/2015 16:55
    Buona sera a Tutti;
    proverei con:

    Option Explicit
    
    Sub Aggiornamesi()
    Application.ScreenUpdating = False
    Dim aAnno As Variant
    Dim aMese As Variant
    aAnno = Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic")
     
        For Each aMese In aAnno
            With Sheets(aMese).Select
                ActiveSheet.Unprotect Password:=""
    '           Tuo codice; ad esempio:
                    Cells(1, 1) = "Mese di: " & aMese
                ActiveSheet.Protect Password:=""
            End With
        Next
    Application.ScreenUpdating = True
    End Sub
    

    poi, se non funziona come vorresti Tu, risolviamo.


    A disposizione.

    Buona serata.

    Giuseppe

    Windows XP - Excel 2000
    Windows 10 - Excel 2013
  • OFFLINE
    Rosario1959
    Post: 198
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 07/05/2015 17:30
    Buona serata rossi, come già successo con dodo non riesco a visualizzare la tua modifica.
    Ciao Giuseppe e buona serata grazie per il tuo intervento ma non va neanche cosi, mi dice che “Optinon Explicit non è valida all’esterno di una routine”, grazie ancora per l’interesse e buona serata a tutto il forum
    Excel 2002 - 2007
  • OFFLINE
    GiuseppeMN
    Post: 1.831
    Registrato il: 03/04/2013
    Utente Veteran
    Excel 2000 - 2013
    00 07/05/2015 17:40
    Buona sera, Rosario;
    puoi controllare se, nel Tuo Codice esiste già un:

        Optinon Explicit 

    Deve esistere una sola dichiarazione Optinon Explicit.


    Giuseppe

    Windows XP - Excel 2000
    Windows 10 - Excel 2013
  • OFFLINE
    rossi1975
    Post: 116
    Registrato il: 02/08/2014
    Città: MILANO
    Età: 49
    Utente Junior
    excel 2010
    00 07/05/2015 18:06
    Rosario scusa forse mi sono espresso male... devi creare proprio una macro chiamata AUTO_OPEN... ; fai così crea un modulo nuovo, copiaci la macro che ti ho postato, e poi eseguila. Poi prova a lanciare la macro che avevi fatto tu all'inizio e vedi se funziona... praticamente con il codice che ti ho messo ogni volta che aprirai il tuo file excel tutti i fogli verranno protetti automaticamente... e potrai lanciare tranquillamente la tua macro che potrà apportare qualsiasi modifica ai tuoi fogli senza ogni volta stare a proteggere e sproteggere. Spero di essere stato un po più chiaro. Un grosso saluto a Giuseppe!!!
    [Modificato da rossi1975 07/05/2015 18:07]
  • OFFLINE
    dodo47
    Post: 52
    Registrato il: 06/04/2013
    Utente Junior
    2010
    00 07/05/2015 18:11
    Re:
    Rosario1959, 07/05/2015 15:13:

    ... quello di dodo sul mio pc non visualizzo il link...

    Ciao
    solo per precisare che (colpa mia non aver evidenziato la parola), devi cliccare sulla parola discussione del mio post.

    scusa e saluti


    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Rosario1959
    Post: 199
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 07/05/2015 22:52
    Buona serata, andiamo con ordine:
    Scusa dodo non avevo capito che bisognava ciccare sulla parola “discussione” adesso che il forum ha cambiato look, prima si vedeva il link, comunque ho provato il codice di quella discussione di rossi ma non ho risolto.
    Chiedo scusa anche a te rossi per non aver capito che dovevo creare una nuova macro, ho creato anche quella come hai suggerito in un nuovo modulo ma non va neanche, forse utilizzo il tuo primo codice e non quello modificato che non riesco a vedere sul mio pc.
    Cia Giuseppe ho controllato in effetti c’era un’altra “Option Explicit” ma senza codice forse era servito per qualche prova ed era rimasto, comunque ho cancellato il codice inutile ed ho utilizzato “Optino Explicit” nel mio codice, ma non va neanche cosi.
    Grazie ancora per l’aiuto e la disponibilità, e una buona serata a tutto il forum
    Excel 2002 - 2007
  • OFFLINE
    GiuseppeMN
    Post: 1.833
    Registrato il: 03/04/2013
    Utente Veteran
    Excel 2000 - 2013
    00 08/05/2015 07:41
    Buona gornata, Rorario.

    Nel file in allegato trovi due pulsanti:
    -     Aggiornamesi
    -     Sproteggi

    Aggiornamesi:
    -     Apre il primo Foglio di lavoro indicato in aAnno
    -     Sprotegge il Foglio di lavoro
    -     Scrive nella Cella "A1" un Record; modificherai questa informazione inserendo la Tua Procedura
    -     Protegge il Foglio di lavoro
    -     Passa al Foglio di lavoro successivo, fino al completamento della lista indicata in aAnno
    -     Al termine dell'operazione, torna sul Foglio di lavoro "Gen"

    Sproteggi:
    -     Sprotegge tutti i Fogli di lavoro indicato in aAnno

    Questa seconda procedura, non era richiesta, ma, ho preferito prevederla per eventuali modifiche nei vari Fogli di lavoro.



    A disposizione.

    Buon Lavoro e buona serata.

    Giuseppe

    Windows XP - Excel 2000
    Windows 10 - Excel 2013
  • OFFLINE
    Rosario1959
    Post: 200
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 08/05/2015 10:40
    Buona giornata Giuseppe, ho provato il codice del tuo file ma continua ad andare in debug mi da “Errore di run-time 424 necessario oggetto” evidenziandomi la prima parte del mio codice, ma non credo che l’errore venga generato dal codice che è in pratica una formula, altrimenti dovrei avere l’errore anche con i fogli sprotetti, invece con i fogli sprotetti il codice funziona aggiornando tutte le celle del range correttamente, ho provato a fare delle ricerche su questo errore 424 ma non riesco a capire quale sia l’oggetto mancante, i fogli sono protetti con pass “pippo” li proteggo con “ActiveSheet.Unprotect Password:="pippo" “ ma continua ad andare in debug. Allego il file certamente tu riesci a capire cosa genera l’errore. Grazie per l’aiuto e una buona giornata a te e a tutto il forum
    Excel 2002 - 2007
  • OFFLINE
    Rosario1959
    Post: 201
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 08/05/2015 11:52
    scusate ma non vedo il file caricato desso provo di nuovo
    Excel 2002 - 2007
  • OFFLINE
    GiuseppeMN
    Post: 1.836
    Registrato il: 03/04/2013
    Utente Veteran
    Excel 2000 - 2013
    00 08/05/2015 12:50
    Buon pomeriggio, Rosario;
    per scrupolo ho provato ad utilizzare il File che ho allegato in Risposta #12, salvato con estensione .xls, con Excel 2000.
    Non ho riscontrato problemi.
    Per verificare la natura dell'errore:
    -    Errore di run-time 424
    prova a lanciare semplicemente il mio file senza alcuna modifica; vedrai che non ci sono problemi.

    Sul Tuo File, ho riscontrato due problemi; l'Errore di run-time 424 viene generato dalle Formule:
    -   .Range("A10:A611").FormulaR1C1 = "=RC[108]"
    -   .Range("B10:B611").FormulaR1C1 = "=IF('Elenco Farmaci'!RC[-1]<>"""",'Elenco Farmaci'!RC[-1],"""")"
    -   .Range("BO10:BO611").FormulaR1C1 = "=SUMPRODUCT(RC[-63]:RC[-3]*(MOD(COLUMN(RC[-63]:RC[-3]),2)=0))"
    -    .Range("CZ10:CZ611").FormulaR1C1 = "=SUM(RC[-34]:RC[-2])"
    -   .Range("DB10:DB611").FormulaR1C1 = "='Elenco Farmaci'!RC[-104]"
    -   .Range("DC10:DC611").FormulaR1C1 = "=RC[-40]"
    -   .Range("DD10:DD611").FormulaR1C1 = "=RC[-4]"
    -   .Range("DE10:DE611").FormulaR1C1 = "=RC[-3]+RC[-2]-RC[-1]"
    -   .Range("DG10:DG611").FormulaR1C1 = "=IF(RC[-109]="""","""",IF(RC[-3]=(RC[-5]+RC[-4]),""da Richiedere"",IF(RC[-3]>=(RC[-5]+RC[-4]),""Attenzione"","""")))"
    -   .Range("DH10:DH611").FormulaR1C1 = "=IF(RC[-110]="""","""",IF(RC[-3]<'Elenco Farmaci'!R9C5,""Verificare"",""""))"
    Credo che il l'Errore venga generato dal "." che precede "Range"; prova a togliere tutti i punti iniziali e vediamo cosa succede.

    Il secondo problema è nel NomeFoglio "Sett"; nella Tua dichiarazione:
    -    aAnno = Array("Gen", "Feb", "Mar", "Apr", "Mag", "Giu", "Lug", "Ago", "Set", "Ott", "Nov", "Dic")
    Il NomeFoglio è diverso; Set con una sola "t".
    Quindi, o modifichi il NomeFoglio oppure modifichi Array da:
    - "Set"
    a
    -    "Sett"



    A disposizione.

    Buon Lavoro e buona serata.

    Giuseppe

     

    Windows XP - Excel 2000
    Windows 10 - Excel 2013
  • OFFLINE
    rossi1975
    Post: 118
    Registrato il: 02/08/2014
    Città: MILANO
    Età: 49
    Utente Junior
    excel 2010
    00 08/05/2015 13:26
    Ciao Rosario quello che dice Giuseppe, che saluto, è tutto esatto... ho levato i punti davanti a range eh ho modificato il nome del foglio da sett a set, seguendo i consigli del sopracitato Giuseppe. Ora sembra che funzioni.
    Per quanto riguarda la mia macro non dovevi scrivere autoopen ma bensì auto_open. Ho tolto quelle miriadi di protect ed unprotect che avevi messo nelle macro ed ho aggiunto la macro che già avevo postato, ed anche qui sembra funzionare tutto; la macro puoi anche non chiamarla auto_open... io l'ho messa in quel modo perchè con quella formula all'avvio del file excel viene caricata qualsiasi cosa messa sotto quella dicitura, quindi all'avvio si proteggeranno automaticamente tutti i fogli. Ti ho aggiunto anche una'altra macro che ti toglie tutte le protezioni nel caso tu voglia fare qualche modifica ai fogli è il modulo 24 (sblocca). Ultima cosa ho rinominato il file .xlsm perchè il formato .xls a me dava qualche problema soprattutto quando salvavo le modifiche. Colgo l'occasione per ringraziare ancora una volta il grande Giuseppe, che è sempre tanto disponibile.
    Allego file modificato, un saluto.
  • OFFLINE
    dodo47
    Post: 58
    Registrato il: 06/04/2013
    Utente Junior
    2010
    00 08/05/2015 13:38
    Ciao
    mi inserisco solo per raccomandare "prudenzialmente" di evitare l'uso di parole riservate Excel nelle variabili di uso comune; pertanto eviterei l'uso di Set ed utilizzerei Sett

    cari saluti
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Rosario1959
    Post: 202
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 08/05/2015 16:48
    Buon pomeriggio a tutti adesso si che funziona, è tutto a posto grazie a voi del forum, ho provato anche il file di rossi ed va benissimo, adesso ho due soluzioni. Ringrazio dodo e rossi per l’aiuto e la disponibilità, e mi permetto un saluto particolare a Giuseppe ricordandole che l’invito è sempre valido compresa......... l’Infermiera!!!!!!!!! [SM=x423030] [SM=x423028]
    Ancora grazie infinite e alla prossima
    Excel 2002 - 2007
  • OFFLINE
    GiuseppeMN
    Post: 1.837
    Registrato il: 03/04/2013
    Utente Veteran
    Excel 2000 - 2013
    00 08/05/2015 18:22
    Se non si ride un pò ...!
    @Rosario:
    Prego inviare ... foto Infermiera (non si sa mai!!!) Stop
    Se foto è Ok e infermiera ... molto, molto paziente.
    Arrivo!!!

    Windows XP - Excel 2000
    Windows 10 - Excel 2013
  • OFFLINE
    alfrimpa
    Post: 675
    Registrato il: 21/06/2013
    Città: NAPOLI
    Età: 70
    Utente Senior
    Excel 365
    00 08/05/2015 18:42
    Se non si ride un po'....!
    [SM=x423045] [SM=x423045] [SM=x423045]

    [SM=x423026]
    [Modificato da alfrimpa 08/05/2015 19:27]

    Alfredo
  • OFFLINE
    Rosario1959
    Post: 203
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 08/05/2015 22:12
    Buona serata, scusate se riapro ma credo di aver venduto la pelle dell’orso prima di averlo ucciso, se da un lato ho risolto è però venuto fuori un’altro problema che il codice “Inserimento riga” non funziona con i fogli nascosti, ho provato a modificare il codice dei fogli così:

    Worksheets("Gen").Visible = True
    Rows(Y).Select	
    Selection.Insert Shift:=xlDown
    Worksheets("Gen").Visible = False
    

    Va ad aggiungere tutte le righe sul foglio “Elenco Farmaci” invece di aggiungere un rigo per foglio, come posso modificare il codice? Scusate ancora e buona serata a tutti

    p.s.: Giuseppe puoi fidarti ho verificato, è molto attraente, è…. molto, molto paziente!!!!!

    Excel 2002 - 2007
  • OFFLINE
    Rosario1959
    Post: 204
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 09/05/2015 00:15
    Buona serata, probabilmente ho risolto inserendo ad inizio codice:

    Sheets("Gen").Visible = True
    Sheets("Feb").Visible = True
    Sheets("Mar").Visible = True

    ecc..ecc..

    e a fine codice i valori a “False”, non è molto geniale ma sembra funzionare, una buona nottata a tutti
    Excel 2002 - 2007
  • OFFLINE
    GiuseppeMN
    Post: 1.838
    Registrato il: 03/04/2013
    Utente Veteran
    Excel 2000 - 2013
    00 09/05/2015 05:26
    Buona giornata, Rosario;
    non vorrei mai giocarmi l'opportunità che mi hai così cortesemente offerto ma ...
    Credo che con il Codice:

    Sheets("Gen").Visible = True
    Sheets("Feb").Visible = True
    Sheets("Mar").Visible = True
    

    La Riga venga aggiunta nel Foglio di lavoro attivo e non non nel Foglio di lavoro "Mese"

    Sarei più propenso a consigliarti:

    Worksheets("Gen").Visible = True
    Worksheets("Gen").Select
    Rows(y).Select
    Selection.Insert Shift:=xlDown
    Worksheets("Gen").Visible = False
    

    L'struzione:
    Worksheets("Gen").Select

    definisce il Foglio di lavoro nel quale inserire la Riga

    In un ottica di risparmio, mi permetto di suggerirti:

    Worksheets("Gen").Visible = True
    Worksheets("Gen").Select
    Cells(y, 1).EntireRow.Insert
    ActiveSheet.Visible = False
    


    Il risultato finale non cambia e ... risparmiamo una riga di Codice; con buona pace di Chi, in Europa, insiste sul risparmiare il più possibile. [SM=x423035]



    A disposizione.

    Buon fine settimana.

    Giuseppe

    Windows XP - Excel 2000
    Windows 10 - Excel 2013
  • OFFLINE
    dodo47
    Post: 60
    Registrato il: 06/04/2013
    Utente Junior
    2010
    00 09/05/2015 09:10
    Ciao
    sempre nello spirito del "risparmio" invocato dall'amico Giuseppe, che ne dite di:

     Worksheets("Gen").Cells(y, 1).EntireRow.Insert
    senza bisogno di scoprire e nascondere il foglio?

    saluti
    Domenico
    Win 10 - Excel 2016
  • OFFLINE
    Rosario1959
    Post: 205
    Registrato il: 11/10/2011
    Città: CAPO D'ORLANDO
    Età: 65
    Utente Junior
    2003, 2007, 2010
    00 09/05/2015 20:17
    Buona serata a tutti,grazie Giuseppe e dodo per i suggerimenti li ho provati entrambi e vanno benissimo, adesso ho altre due soluzioni, ho provato più volte il file e adesso posso dire di averlo completatato veramente grazie a voi del forum sopratutto a rossi, dodo e Giuseppe, grazie ancora e una buona serata a tutti
    Excel 2002 - 2007