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/2069-emfanisi-kryfoi-filloy-basi-sygkekrimenis-timis.html)

ΤΖΙΜΗΣ 23-09-12 23:15

Εμφάνιση κρυφού φύλλου βάση συγκεκριμένης τιμής
 
Καλησπέρα σε όλους τους φίλους της κοινότητας.Θα ήθελα την πολύτιμη βοήθεια σας στο εξής.
Έχω δημιουργήσει μια εφαρμογή για διαχείριση καρτελών μαθητολογίου.Δηλαδή ένα βιβλίο το οποίο αποτελείται από καρτέλες μαθητών.Κάθε ένα φύλλο αντιστοιχεί και σε ένα μαθητή με το ονοματεπώνυμο του.
Θέλω όμως στην εφαρμογή αυτή να προσθέσω και το εξής σύνθετο , μιας και οι μαθητές με κωδικό που θα τους δωθεί θα μπορούν να κατεβάζουν την εν λόγω εφαρμογή από την ιστοσελίδα του σχολείου.
Ειδικότερα στο πρώτο φύλλο που έχω δημιουργήσει , σε ένα κελί να πληκτρολογούν τον αριθμό μητρώο τους( αλφαριθμητικός χαρακτήρας) και εν συνεχεία να τους εμφανίζεται η καρτέλα τους, η οποία θα είναι κλειδωμένη.Αυτό απαιτεί:
1. Όλα τα φύλλα θα είναι σε απόκρυψη και θα εμφανίζεται το συγκεκριμένο φύλλο ανάλογα με την πληκτρολόγηση του αριθμού μητρώου.Καλό θα είναι κατά την πληκρολόγηση να γίνεται και ένας έλεγχος ορθότητας για το αν υπάρχει ο αριθμός μητρώου στον πίνακα ή όχι
2.Απαιτεί και ένα φύλλο εργασίας το οποίο και αυτό έχω φτιάξει, όπου και αυτό είναι μη ορατό και περιέχει τα ονοματεπώνυμα και δίπλα τους αριθμούς μητρώου.
Δηλαδή, το βασικό ερώτημα είναι πως μπορεί να γίνεται εμφάνιση ενός φύλλου που έχει αποκρυφθεί, δοθέντος μιας συγκεκριμένης τιμής που θα παίρνει από ένα κελί του πρώτου φύλλου.
Δεν ξέρω αν έγινα κατανοητός.Αν απαιτείται να ανεβάσω και ένα πρδ να το κάνω.
Με εκτίμηση Τζίμης

Tasos 24-09-12 06:37

Καλημέρα σε όλους.

Αγαπητέ Τζίμη, υπάρχει λύση στο ζητούμενο σου.

Ωστόσο, θα σου συνιστούσα να επανεξετάσεις το γεγονός ότι ο μαθητής που θα έχει ΌΛΟ το βιβλίο στη διάθεση του, μπορεί σχετικά εύκολα, έχοντας όλο το χρόνο στη διάθεση του και χωρίς κανέναν κίνδυνο να άρει την προστασία των φύλλων και να αποκτήσει πρόσβαση στα δεδομένα άλλων μαθητών.

Για μένα θα έπρεπε ο μαθητής να κάνει Login σε μια Userform της Excel ( ή σε φόρμα Acess )
και αφού δώσει τα στοιχεία του ( Αρ. μαθητολογίου και κωδικό ), η εφαρμογή να δημιουργεί ένα νέο βιβλίο εργασίας Excel όπου θα περιέχονται μόνο τα δεδομένα που αφορούν τον μαθητή.
Σε καμία περίπτωση δεν θα επέτρεπα να αποστέλλεται ολόκληρο το βιβλίο σε κάθε μαθητή.

Πως γίνεται αυτό τεχνικά:
Η εφαρμογή με βοήθεια του διακομιστή OLEDB με ADO ή DAO μπορεί με βάση τα στοιχεία του μαθητή να αντλήσει μόνο τα δεδομένα του φύλλου εκείνου που αντιστοιχεί στοn Αρ. μαθητολογίου.

Το να έχεις τα ονόματα των μαθητών στις καρτέλες των φύλλων μπορεί να σου δημιουργήσει θέμα στην αναζήτηση τους αλλά αυτό είναι άλλο θέμα.

Μετά απ' αυτά... περιμένουμε νέα σου.

Φιλικά

Τάσος

ΤΖΙΜΗΣ 24-09-12 08:15

Φίλε Τάσο καταρχή καλή σου μέρα. Πράγματι έχεις απόλυτο δίκαιο.Αυτή την ανησυχία την έχω και εγώ.Όμως:
1.κατά πόσο ένας απλός χρήστης μπορεί να διαθέτει γνώσεις και χρόνο για να ασχοληθεί με κάτι που κατά πάσα πιθανότητα να μην έχει και μεγάλη σημασία;
2.Η λύση που προτείνες είναι η ιδανικότερη.Όμως απαιτεί προχωρημένες προγραμματιστικές γνώσεις για την υλοποίηση και την συντήρηση του προγράμματος που εγώ δεν τις διαθέτω.
Με εκτίμηση

Tasos 24-09-12 13:03

1 Συνημμένο(α)
Καλημέρα Τζίμη.

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

Επισυνάπτω ένα παράδειγμα με αρκετά φύλλα, ένα για κάθε μαθητή.

Στο παράδειγμα αυτό απαιτείται η επιλογή ονόματος και ο κατάλληλος κωδικός για να εισέλθει ο μαθητής στην εφαρμογή η οποία θα εμφανίσει μόνο το φύλλο εργασίας που του αντιστοιχεί.
Επίσης το βιβλίο είναι προστατευμένο με κωδικό περιορίζοντας έτσι ανεπιθύμητες δραστηριότητες...

Αν προσπαθήσει κανείς να ανοίξει το βιβλίο χωρίς να έχει ενεργοποιήσει τις μακροεντολές, το μόνο φύλλο που θα δει είναι το φύλλο "Login" το οποίο είναι προστατευμένο με τον κωδικό ''test" (Ο ίδιος κωδικός ισχύει για το βιβλίο εργασίας και το έργο VBA).

Για το πρώτο όνομα (Γιάννης) της πτυσσόμενης λίστας Login ο κωδικός είναι Pass01
Ο Γιάννης έχει δικαιώματα διαχειριστή οπότε μετά από επιτυχημένο Login θα μπορεί να βλέπει και να επεξεργάζεται τα πάντα στο βιβλίο εργασίας.

Σαν διαχειριστής, μπορεί κανείς στο φύλλο UserNames να τροποποιήσει τους κωδικούς,
τα ονόματα φύλλων καθώς και τα δικαιώματα διαχειριστή.

Για τα υπόλοιπα ονόματα οι κωδικοί είναι Pass02 , Pass03 κοκ. αντίστοιχα με τη σειρά εμφάνισης των ονομάτων στη λίστα.


Όσο για τον κώδικα VBA, πιστεύω ότι μπορείς να τον επεξεργαστείς.

Καλή συνέχεια.

ΤΖΙΜΗΣ 24-09-12 13:16

Τάσο ακριβώς αυτό ήθελα.Νομίζω ότι το παράδειγμα αυτό θα βοθήσει και πολλούς άλλους φίλους του forum.Θα μελετήσω όλη την υλοποίηση του παραδείγματος και αν έχω κάποια απορία θα επανέρθω
Ένα ευχαριστώ είναι πολύ λίγο
Με εκτίμηση Τζίμης

Tasos 24-09-12 13:39

Τζίμη, χαίρομαι που βοηθήθηκες!

Μπορείς να προσθέσεις τον παρακάτω κώδικα στη φόρμα ώστε να μην κλείνει από το πλαίσιο ελέγχου [x].

Κώδικας:

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    Cancel = Not CloseMode
End Sub

Τάσος

ΤΖΙΜΗΣ 24-09-12 15:56

Τάσο αν θέλω και τα φύλλα εργασίας να είναι προστατευμένα όταν τα ανοίγει ο χρήστης τι πρέπει να κάνω;

Tasos 24-09-12 17:29

Τζίμη,Μπορείς να κλειδώνεις και τα φύλλα με τον κωδικό πχ. "test" χειροκίνητα
ή τροποποιείς τμήματα του κώδικα όπως φαίνεται παρακάτω:

Στην λειτουργική μονάδα "ThisWorkbook:"

Κώδικας:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim wks As Object
    ThisWorkbook.Unprotect Password:="test"
    If ShLogin.Visible <> xlSheetVisible Then ShLogin.Visible = xlSheetVisible
    ShLogin.Activate
    For Each wks In ThisWorkbook.Sheets
    wks.Protect Password:="test", DrawingObjects:=True, Contents:=True, Scenarios:=True
        If wks.Visible Then
            If wks.Name <> ShLogin.Name Then
                wks.Visible = xlSheetVeryHidden
            End If
        End If
    Next
    ThisWorkbook.Protect Password:="test", Structure:=True, Windows:=False
    ThisWorkbook.Save
End Sub

Στη φόρμα:
Κώδικας:

Private Sub cmdOK_Click()
    Dim username As String, userpass As String, IsAdmin As Integer, wks As Object
    With Me.cboAllUsers
        username = .List(.ListIndex, 1)
        userpass = .List(.ListIndex, 2)
        IsAdmin = .List(.ListIndex, 3)
    End With
    If StrComp(userpass, Me.txtPass.Text, vbBinaryCompare) = 0 Then
        Application.ScreenUpdating = False
        ThisWorkbook.Unprotect Password:="test"
        If IsAdmin Then
            ThisWorkbook.Unprotect Password:="test"
            For Each wks In ThisWorkbook.Sheets
                wks.Visible = xlSheetVisible
                wks.Unprotect Password:="test"
            Next
            ShUserNames.Activate
            Application.ScreenUpdating = True
        Else
          ThisWorkbook.Sheets(username).Visible = xlSheetVisible
          ThisWorkbook.Sheets(username).Protect Password:="test", DrawingObjects:=True, Contents:=True, Scenarios:=True
            ShLogin.Visible = xlSheetVeryHidden
            ThisWorkbook.Protect Password:="test", Structure:=True, Windows:=False
        End If
        Unload Me
    Else
        Attempts = Attempts + 1
        If Attempts > 3 Then
            MsgBox "Δεν μπορείτε να εισέλθετε στην εφαρμογή." & vbLf & _
                  "Επικοινωνήστε με τον διαχειριστή της εφαρμογής.", vbInformation, ThisWorkbook.Name
            If Workbooks.Count > 1 Then
                ThisWorkbook.Close SaveChanges:=False
            Else
                Application.Quit
            End If
        Else
            Me.txtPass.Text = vbNullString
            Me.txtPass.SetFocus
            MsgBox "Ο κωδικός δεν είναι σωστός! Δοκιμάστε ξανά.", vbExclamation, "Προσοχή!"
        End If
    End If
End Sub

Καλή συνέχεια!

Τάσος

ΤΖΙΜΗΣ 24-09-12 20:33

Τάσο λειτουργεί άψογα.
Να είσαι πάντα καλά για τη μεγάλη βοήθεια που μας προσφέρεις.
Τζίμης


Η ώρα είναι 14:33.

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


Search Engine Optimization by vBSEO 3.3.2