Ανανέωση ιστοσελίδας
ms-office.gr > Forum > Microsoft Excel > Excel - Ερωτήσεις / Απαντήσεις > [VBA] Αριθμητικό πεδίο σε UserForm

Excel - Ερωτήσεις / Απαντήσεις Ότι έχει σχέση με συναρτήσεις, μορφοποίηση, εκτυπώσεις γραφήματα κτλ.

Απάντηση στο θέμα

 

Εργαλεία Θεμάτων Τρόποι εμφάνισης
  #1  
Παλιά 16-04-14, 22:26
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 24-03-2012
Περιοχή: Θεσσαλονίκη
Μηνύματα: 70
Προεπιλογή Αριθμητικό πεδίο σε UserForm

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

Σε μία UserForm έχω ένα txtbox στο οποίο θέλω να εξασφαλίσω ότι θα λαμβάνω μόνο αριθμούς ως καταχώριση και μάλιστα όχι ακέραιους αλλά μέχρι τέσσερα δεκαδικά ψηφία. Το πρόβλημα που μου προέκυψε είναι ότι ανάλογα με τη διάταξη - ρύθμιση ή τη γλώσσα του πληκτρολογίου του χρήστη η υποδιαστολή μπορεί να είναι είτε κόμα είτε τελεία. Στη δεύτερη περίπτωση - της τελείας δηλαδή - γίνεται ο χαμός γιατί κατά την μεταφορά της τιμής από τη φόρμα στο κελί του φύλλου έρχεται αντί για 1,038 η τιμή 1.038 και επειδή πρόκειται για τιμή μονάδας όταν στη συνέχεια πολλαπλασιάζεται με την ποσότητα έχω κάτι αστρονομικά ποσά ως αποτέλεσμα.
Υπάρχει κάποια λύση που θα μπορούσατε να προτείνετε;

Δημήτρης
Απάντηση με παράθεση
  #2  
Παλιά 17-04-14, 10:00
Το avatar του χρήστη 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
Προεπιλογή

Καλημέρα
Στο παράθυρο διαλόγου των επιλογών της εφαρμογής,
(Κορδέλα > Αρχείο > Επιλογές > Προχωρημένα)
Υπάρχει εξ ορισμού, επιλεγμένο το πεδίο να χρησιμοποιεί η excel τα διαχωριστικά του συστήματος.
Πρέπει όλοι οι χρήστες, να ξετσεκάρουν το πεδίο αυτό και να ορίσουν στα αμέσως δύο πιο κάτω πεδία, τι θέλουν να χρησιμοποιείται σαν διαχωριστικό δεκαδικών και χιλιάδων.
(*βλέπε εικόνες σε Αγγλικά & Ελληνικά)
Αυτό λογικά πρέπει να διορθώσει τα πράγματα.
Αν δεν διορθωθεί ανέβασε ένα αρχείο να βάλουμε μέσα στον κώδικα (αν χρειάζεται) κάποιο format
Συνημμένα Thumbnails
Αριθμητικό πεδίο σε UserForm-katagrafi.png   Αριθμητικό πεδίο σε UserForm-katagrafi1.png  
Απάντηση με παράθεση
  #3  
Παλιά 17-04-14, 13:13
Το avatar του χρήστη Tasos
Διαχειριστής
Όνομα: Τάσος Φιλοξενιδης
Έκδοση λογισμικού Office: Ms-Office 365
Γλώσσα λογισμικού Office: Ελληνική, Αγγλική, Γερμανική
 
Εγγραφή: 21-10-2009
Μηνύματα: 2.011
Προεπιλογή

Καλημέρα!

Ο παρακάτω κώδικας:

Δεν επιτρέπει την επικόλληση κειμένου από το πρόχειρο.

Δεν επιτρέπει την καταχώρηση μή έγκυρου αριθμού στο πεδίο TextBox1.

Λαμβάνει υπόψη του της ρυθμίσεις υποδιαστολής για δεκαδικά ψηφία του υπολογιστή.

Επιτρέπει την καταχώρηση αρνητικού αριθμού.


Κώδικας:
Option Explicit
Private decSeparator As String

Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyV Or KeyCode = vbKeyInsert Then
        KeyCode = 0
    End If
End Sub

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    If Chr(KeyAscii) = "-" Then
        If InStr(1, TextBox1.Text, "-") Then
            KeyAscii = 0
        ElseIf Len(TextBox1.Text) Then
            If TextBox1.SelStart > 0 Then
                KeyAscii = 0
            End If
        End If
    Else
        If Not IsNumeric(Chr(KeyAscii)) Then
            If Chr(KeyAscii) = decSeparator Then
                If Len(TextBox1.Text) = 0 Or InStr(1, TextBox1.Text, decSeparator) Then
                    KeyAscii = 0
                End If
            Else
                KeyAscii = 0
            End If
        End If
    End If
End Sub

Private Sub UserForm_Initialize()
    decSeparator = Application.International(xlDecimalSeparator)
End Sub

Για να επιστρέψουμε την αριθμητική τιμή του πεδίου TextBox1 στο κελί A1 χρησιμοποιούμε:

Κώδικας:
 
    If IsNumeric(TextBox1.Text) Then
        Sheet1.Range("A1").Value = CDbl(TextBox1.Text)
    Else
        Sheet1.Range("A1").ClearContents
    End If
όπου Sheet1 = το κωδικό όνομα του φύλλου όπως εμφανίζεται στον VBE πχ. Sheet1(Φύλλο 1)
Φιλικά

Τάσος
__________________
Ms-Office Development Team
Ανάπτυξη επαγγελματικών εφαρμογών

Τελευταία επεξεργασία από το χρήστη Tasos : 17-04-14 στις 13:23.
Απάντηση με παράθεση
  #4  
Παλιά 21-04-14, 18:39
Όνομα: Δημήτρης
Έκδοση λογισμικού Office: Ms-Office 2013
Γλώσσα λογισμικού Office: Αγγλική
 
Εγγραφή: 24-03-2012
Περιοχή: Θεσσαλονίκη
Μηνύματα: 70
Προεπιλογή

Καλησπέρα και Χρόνια Πολλά!!!

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

Φιλικά
Δημήτρης
Απάντηση με παράθεση
Απάντηση στο θέμα


Δικαιώματα - Επιλογές
Δε μπορείτε να δημοσιεύσετε νέα μηνύματα
Δε μπορείτε να δημοσιεύσετε απαντήσεις
Δεν μπορείτε να επισυνάψετε αρχεία
Δεν μπορείτε να επεξεργαστείτε τα μηνύματα σας

Ο κώδικας ΒΒ είναι σε λειτουργία
Τα Smilies είναι σε λειτουργία
Ο κώδικας [IMG] είναι σε λειτουργία
Ο κώδικας HTML είναι εκτός λειτουργίας
Trackbacks are εκτός λειτουργίας
Pingbacks are εκτός λειτουργίας
Refbacks are εκτός λειτουργίας


Παρόμοια Θέματα

Θέμα Δημιουργός Forum Απαντήσεις Τελευταίο Μήνυμα
[VBA] UserForm gfevran Excel - Ερωτήσεις / Απαντήσεις 4 12-08-14 00:16
[VBA] Userform gfevran Excel - Ερωτήσεις / Απαντήσεις 4 22-03-14 15:05
Αριθμητικό ποσό ολογράφως. Ms-Office-Development Team Access samples - Χρήσιμα αρχεία & παραδείγματα 0 10-11-09 14:03
Αριθμητικό ποσό ολογράφως. Tassos Access - Ερωτήσεις / Απαντήσεις 0 08-03-09 23:10


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