Εμφάνιση ενός μόνο μηνύματος
  #2  
Παλιά 01-09-14, 08:21
Το avatar του χρήστη Spirosgr
Spirosgr Ο χρήστης Spirosgr δεν είναι συνδεδεμένος
Συντονιστής
Όνομα: Σπύρος Τσιλιγιάννης
Έκδοση λογισμικού Office: Ms-Office 2003, Ms-Office 2007, Ms-Office 2010, Ms-Office 2013, Ms-Office 2016, Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική
 
Εγγραφή: 22-11-2011
Περιοχή: Αθήνα
Μηνύματα: 2.321
Προεπιλογή

Καλημέρα
Κατ' αρχήν κάνε το βιβλίο σου .xlsm και όχι .xlsx που είναι το δείγμα σου
Το ζητούμενο έτσι που το θέλεις ΔΕΝ μπορεί να εκτελεστεί από ένα μόνο κουμπί (toggle button)

Πρέπει να δημιουργήσουμε έναν κώδικα ο οποίος να ακολουθεί την εξής διαδικασία:
1 Να «ξεκλειδώσει» το φύλλο
2 Να συγχωνεύσει τα επιλεγμένα κελιά αν δεν είναι συγχωνευμένα (και αντίστροφα)
3 Να «κλειδώσει» το φύλλο
Εδώ λοιπόν με βάση το ζητούμενο οι ενέργειες που θέλεις να κάνεις
δεν μπορούν να εκτελεστούν από ένα (toggle) κουμπί για τον εξής λόγο.
Αν οι ενέργειες είναι :
επιλέγω κελιά > πιέζω κουμπί > ξεκλειδώνει > συγχωνεύει > κλειδώνει > γράφω (όλα καλά)
Αντίθετα:
επιλέγω κελιά > πιέζω κουμπί > ξεκλειδώνει > αποσυγχωνεύει > κλειδώνει > μορφοποιώ
δεν θα μπορεί να γίνει λόγω κλειδώματος του φύλλου.

Κώδικας:
Sub AutoMerge()
    Application.ScreenUpdating = False
    Sheet1.Unprotect Password:="1234"
    With Selection
        If Selection.MergeCells = True Then Selection.UnMerge Else Selection.Merge
    End With
    Sheet1.Protect Password:="1234"
End Sub
Ο κώδικας πιο πάνω κάνει την δουλειά σε ένα (toggle) κουμπί
εφ' όσον μετά δεν θέλουμε να επεξεργαστούμε (με μορφοποίηση για παράδειγμα) τα αποσυγχωνευμένα κελιά

Άλλως καταργούμε την τελευταία γραμμή Sheet1.Protect Password:="1234"
Το φύλλο μένει «ξεκλείδωτο» και το επεξεργαζόμαστε.
Φτιάξε ένα δεύτερο κουμπί με την καταργημένη γραμμή και σύνδεσε σε αυτό τον κώδικα:

Κώδικας:
Sub LockSheet()
    Sheet1.Protect Password:="1234"
End Sub
για να το κλειδώνεις μετά την επεξεργασία μορφοποίησης

Σημείωση:
Από την στιγμή που έχουμε κώδικα για την προστασία
με εμφανές το Password σε οποιονδήποτε πάει πίσω (Alt + F11) στην VBA
δεν ξέρω σε τι εξυπηρετεί το κλείδωμα πέραν της προστασίας πχ σε τύπους κλπ
Αν πρέπει να κλειδωθεί το φύλλο από την πρόσβαση σε τρίτους θα πρέπει να «εξαφανιστεί» και η module
Μια πρόχειρη αλλά σχετικά καλή λύση είναι:
Όπου Password:="1234" να μπει
Password:=Sheet2.Range("Pass").Value
που σε οδηγεί σε ένα άλλο φύλλο το οποίο θα κάνεις από τις ιδιότητες φύλλου VeryHidden

*Όπου Sheet1, 2 κωδικά ονόματα φύλλων
*Όπου Range("Pass") κελί ονομασμένο ως pass

Τελευταία επεξεργασία από το χρήστη Spirosgr : 01-09-14 στις 08:52. Αιτία: Σύνταξη
Απάντηση με παράθεση