Forum

Forum (https://www.ms-office.gr/forum/)
-   Excel - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/)
-   -   [VBA] Κλείδωμα - Ξεκλείδωμα όλων των φύλλων ενός βιβλίου (https://www.ms-office.gr/forum/excel-erotiseis-apantiseis/3964-kleidoma-ksekleidoma-olon-ton-fillon-enos-biblioy.html)

AIAS 18-12-15 19:50

Κλείδωμα - Ξεκλείδωμα όλων των φύλλων ενός βιβλίου
 
Καλησπέρα και συγχαρητήρια για τη βοήθεια που μας παρέχετε. Έχω περάσει αρκετές ώρες διαβάζοντας θέματά σας και λύσεις και ομολογώ ότι έχω βοηθηθεί πάρα πολύ δημιουργώντας ήδη αρκετά πράγματα στο excel που πριν τα έκανα αρκετά δύσκολα και μέσω "Ζιμπάμπουε" πολλές φορές.
Είναι το πρώτο ερώτημά μου στο forum και θα ήθελα την βοήθειά σας.
Έχω ένα βιβλίο με 35 - 40 φύλλα. Σε όλα τα φύλλα έχω κλειδωμένα κελιά με διάφορους τύπους και υπερσυνδέσεις. Όλα τα φύλλα τα έχω προστατευμένα (χωρίς κωδικό) για λόγους αποφυγής τυχαίων καταχωρήσεων. Όταν όμως θέλω να αλλάξω να προσθέσω ή να διορθώσω οτιδήποτε σε τύπους κλπ κλειδωμένα κελιά, πρέπει να ξεκλειδώνω ένα ένα φύλλο και μετά να ξανακλειδώνω.
Θα ήθελα λοιπόν ένα κώδικα VBA για να τον σετάρω με κουμπί στο αρχικό φύλλο που θα μου ξεκλειδώνει απ΄ ευθείας όλα τα φύλλα και με δεύτερο πάτημα (όταν έχω τελειώσει διορθώσεις) να ξανακλειδώνει όλα τα φύλλα σύμφωνα με τις επιλογές που έχω για προστασία. Ευχαριστώ και αναμένω

Spirosgr 19-12-15 09:00

Καλημέρα
Μια πρόταση, χωρίς κουμπιά είναι η εξής:
Υποθέτουμε, ότι έχουμε ένα βιβλίο, με πρώτο (βασικό) φύλλο το MainSheet.
Ακόμα, θεωρούμε ότι σε όλα τα υπόλοιπα φύλλα, έχει γίνει σωστά
το κλείδωμα κάποιων κελιών, με την γνωστή διαδικασία.
Το κλείδωμα είναι, χωρίς κωδικό και επιτρέπει μόνο την επιλογή, μη κλειδωμένων κελιών...

Στα συμβάντα βιβλίου, βάζουμε, τους δύο πιο κάτω κώδικες:
Κώδικας:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)
    Dim WS As Worksheet
    If ActiveSheet.Name <> "MainSheet" Then
        ActiveSheet.Unprotect
        Select Case MsgBox("Η προστασία έχει καταργηθεί." & vbLf _
        & "Θέλετε να την επαναφέρετε;", vbYesNo, "Ερώτηση...")
        Case vbYes
            ActiveSheet.Protect
        Case vbNo
            Exit Sub
        End Select
    End If
End Sub

Κώδικας:

Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
    Dim WS As Worksheet
    If ActiveSheet.Name <> "MainSheet" Then
        ActiveSheet.Protect
    End If
End Sub

Τι κάνει:
Κάθε φορά που θα «μπαίνουμε» σε ένα οποιοδήποτε φύλλο, πλήν του MainSheet,
μας ρωτάει αν θέλουμε να καταργήσουμε την προστασία...
Πατάμε το ανάλογο κουμπί Yes - No
Όταν «βγούμε» από το φύλλο, η προστασία επανέρχεται, αυτόματα...

Σημειώσεις:
1
Αλλάξτε το όνομα MainSheet, με ό,τι θέλετε...
2
Το MainSheet, δεν είναι απαραίτητο, να είναι το πρώτο φύλλο, του βιβλίου...

kapetang 19-12-15 11:09

1 Συνημμένο(α)
Καλημέρα

Μια πρόταση με κουμπί.

Λεπτομέρειες στο συνημμένο

AIAS 19-12-15 17:34

Σπύρο και Γιάννη σας ευχαριστώ πάρα πολύ για την άμεση ανταπόκρισή σας. Μακάρι όλοι μας να δείχνουμε την ίδια αλληλεγγύη σε ανθρώπους που ζητούν την βοήθειά μας σε κάθε πτυχή της ζωής μας. Είστε αξιέπαινοι και πάλι σας ευχαριστώ. Δοκίμασα και τα δύο και δουλεύουν άψογα!!!. Προτίμησα όμως τη λύση του Γιώργου. Αλλά και η λύση του Σπύρου μου έδωσε το έναυσμα για χρησιμοποίησή της με κάποια τροποποίηση σε άλλο αρχείο μου. "Με ένα σμπάρο δύο τρυγόνια".
Σας ευχαριστώ για το χρόνο σας και κυρίως για την διάθεσή σας για βοήθεια.

Spirosgr 19-12-15 18:12

Καλησπέρα
Κατ' αρχήν, ευχαριστούμε για τα καλά σου λόγια!
Ως υποσημείωση, για να βλέπουμε και λίγο τα πράγματα πιο σφαιρικά,
θα ήθελα σου πω, (ανεξάρτητα από την επιλογή σου)
ότι η λύση που πρότεινα, έχει το πλεονέκτημα, να εξασφαλίζει το κλείδωμα
του κάθε φύλλου, κατά την έξοδο, έτσι ώστε αν χρησιμοποιήσει το βιβλίο και άλλος χρήστης
να μην «μπει» σε ένα ξεκλείδωτο βιβλίο, αν για παράδειγμα ξεχάσεις να πατήσεις και πάλι
το κουμπί πριν την έξοδο...και αποθήκευση.
Αυτό ήταν και το κίνητρο, για την λύση που πρότεινα...και δεν πρότεινα κάτι με κουμπί...
Θα μπορούσε κανείς, αν πρέπει οπωσδήποτε να έχει κουμπί στον κώδικα, να βάλει το συμβάν
BeforeClose ή BeforeSave (ανάλογα το έργο και τις προτιμήσεις του)
να προστατεύει το βιβλίο ή τα φύλλα, στην αποθήκευση ή στο κλείσιμο του βιβλίου,
για να αποφύγει αυτά που είπαμε πιο πάνω...
Και πάλι, ευχαριστούμε για τα καλά σου λόγια!

AIAS 19-12-15 19:23

Σπύρο σε ευχαριστώ και πάλι.Για αυτό είπα "με ένα σμπάρο δύο τρυγόνια¨. Η δική σου λύση όπως έγραψα μου έδωσε το έναυσμα και τη χρησιμοποίησα ήδη σε άλλο αρχείο ακριβώς για τους λόγους που γράφεις (μπαινοβγαίνουμε πολλοί). Σε αυτό το έργο προτίμησα τη λύση του Γιώργου γιατι μπαίνω μόνο εγώ και ξεκλειδώνω τα φύλλα όταν θέλω να αλλάξω για διάφορους λόγους συναρτήσεις,τύπους κλπ μαζικά σε πολλά φύλλα.Και πάλι ευχαριστώ

kapetang 19-12-15 19:53

1 Συνημμένο(α)
Καλησπέρα

Αία, δες το συνημμένο.

1)Βελτίωσα λίγο τον κώδικα κλειδώματος των φύλλων.

2) Πρόσθεσα κώδικα στο συμβάν BeforeClose, ώστε το βιβλίο να αποθηκεύεται με προστατευμένα φύλλα.

Κατά την προσαρμογή του κώδικα στη γραμμή:

Worksheets("Sheet1").cmdLockUnlock.Caption = "UnLock"

της διαδικασίας BeforeClose, τα Sheet1 και cmdLockUnlock,

θα πρέπει να αλλάξουν με το όνομα του φύλλου και του κουμπιού αντίστοιχα.

Φιλικά/Γιώργος

AIAS 19-12-15 20:12

Γιώργο σε ευχαριστώ......θα το εφαρμόσω...για ακόμη περισσότερη σιγουριά. Σπύρο και σε σένα οι ευχαριστίες μου.


Η ώρα είναι 19:08.

Ms-Office.gr - ©2000 - 2024, Jelsoft Enterprises Ltd.


Search Engine Optimization by vBSEO 3.3.2