Forum

Forum (https://www.ms-office.gr/forum/)
-   Access - Ερωτήσεις / Απαντήσεις (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/)
-   -   Μάσκα εισόδου για ημερομηνία (https://www.ms-office.gr/forum/access-erotiseis-apantiseis/1987-maska-eisodoy-gia-imerominia.html)

ypanagis 26-07-12 13:42

Μάσκα εισόδου για ημερομηνία
 
Καλημέρα σε όλους μια μικρή ερωτησούλα αν ξέρετε.

Υπαρχει καμιά μάσκα εισόδου για ημερομηνία έτσι ώστε όταν ο χρήστης πχ. θέλει να εισάγει την 6/7/2012 και πληκτρολογεί '6' και μετά '/' να του αλλάζει κατά την πληκτρολόγηση τη μορφή της ημέρας σε "06/"

Με την προκαθορισμένη μάσκα σύντομης ημερομηνίας το αποτέλεσμα στην οθόνη είναι

"6_/7_/2012"

Μήπως πρέπει να υλοποιούμε το Change event ?

Γιάννης

Tasos 26-07-12 15:37

Καλησπέρα Γιάννη.

Αντί για μάσκα εισαγωγής για ημερομηνίες πληκτρολόγησε στο πεδίο αυτό: ηη/μμ/αααα (Ιδιότητες >Μορφή >Μορφή).

Τώρα στην πράξη:
  • Αν πληκτρολογήσεις 6,6 θα συμπληρωθεί 06/06/2012
  • Αν πληκτρολογήσεις 6,6,6 θα συμπληρωθεί 06/06/2006

Αναλόγως το πληκτρολόγιο μπορείς αντί για κόμμα να χρησιμοποιήσεις "/" ή "-".

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

Τάσος

ypanagis 27-07-12 07:51

Ωραία Τάσο ευχαριστώ πολύ! Να σε ρωτήσω και 2 άλλες σχετικές απορίες.
  1. Όταν χρειάζομαι μορφή σύντομης ώρας, υπάρχει δυνατότητα κάποιος όταν θέλει να εισάγει ας πούμε 7:00 να πληκτρολογεί μόνο το 7 και να του συμπληρώνει την ώρα στη σωστή μορφή;
  2. Μπορεί κάποιος να πληκτρολογήσει 730 (χωρίς τελεία ή ":") και να αντικατασταθεί με τη μορφή σύντομης ώρας 07:30;

Ευχαριστώ
Γιάννης

Tasos 27-07-12 10:05

Καλημέρα Γιάννη.

Εν μέρει μπορεί να επιτευχθεί αυτό.

Υπάρχει όμως πρόβλημα στο λογικό κομμάτι του ζητούμενου.

Δεν μπορεί όμως το πρόγραμμα να γνωρίζει τις προθέσεις του χρήστη όταν εκείνος πληκτρολογήσει πχ. 125.
Το 125 θα μπορούσε να είναι 12:05 ή 01:25.

Αν υποτεθεί ότι συμπληρώνει κανείς μηδενικά (πχ 0125 για 01:25) ώστε κάποιος κώδικας VBA να μπορεί να αποδώσει τη σωστή ώρα, τότε είναι προτιμότερο να χρησιμοποιηθεί η μάσκα εισαγωγής "Σύντομη ώρα".

Φιλικά

Τάσος

ypanagis 27-07-12 10:25

Ευχαριστώ πολύ Τάσο,

Θα υλοποιήσω κώδικα σε VBA για να "γεμίζω" την ώρα με μηδενικά από δεξιά. Αυτό το παράδειγμα που αναφέρεις είναι σωστό απλά θα ήθελα αν ο χρήστης γράψει 7 και πατήσει tab να το μετατρέψει αυτόματα σε 07:00 που με τη μάσκα δεν γίνεται

Ευχαριστώ πολύ για το χρόνο σου
Γιάννης

Tasos 27-07-12 10:54

Αν το πεδίο περιέχει μέχρι 2 αριθμητικά ψηφία και ο αριθμός που σχηματίζεται είναι μικρότερος το 24
τότε ο παρακάτω κώδικας θα βοηθήσει.
Μπορείς να προσθέσεις στον κώδικα και τις υπόλοιπες περιπτώσεις/συνθήκες (Case) που κρίνεις ότι θα χρειαστούν.

Ο κώδικας προϋποθέτει ένα πεδίο στη φόρμα με το όνομα TimeField και μορφή "Σύντομη ώρα".
Το πεδίο είναι δεσμευμένο με ένα πεδίο πίνακα που έχει τύπο δεδομένων Ημερομηνία/Ώρα.

Κώδικας:

Option Compare Database
Option Explicit
Private Const DataErrNumber = 2113

Private Sub Form_Error(DataErr As Integer, Response As Integer)
    Dim CurrentValue As String
    On Error Resume Next
    If Me.ActiveControl.Name = Me.TimeField.Name Then
        If DataErr = DataErrNumber Then
            Response = acDataErrContinue
            CurrentValue = Me.TimeField.Text
            If Not IsNumeric(CurrentValue) Then
                Me.TimeField.Undo
                Exit Sub
            End If
            Me.TimeField.Text = FormatTime(CurrentValue)
            SendKeys "{TAB}"
        End If
    End If
End Sub


Private Function FormatTime(strValue As String) As String
    Select Case Len(strValue)
    Case Is > 0, Is < 3
        If strValue < 24 Then FormatTime = Format(strValue, "00") & ":00"
    Case 3
        'Ο κώδικας σου .......................
    Case 4
        'Ο κώδικας σου .......................
    End Select
End Function

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

Ο κώδικας μπορεί να απλοποιηθεί αν το πεδίο δεν είναι δεσμευμένο.

Τάσος

ypanagis 27-07-12 11:25

Πολύ καλό! Ευχαριστώ πολύ Τάσο!

Καλή συνέχεια και σε σένα
Γιάννης


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

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


Search Engine Optimization by vBSEO 3.3.2