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/1635-metatropi-posoi-se-keimeno.html)

Χρήστος 11-02-12 07:59

Μετατροπή Ποσού σε Κείμενο
 
Καλημέρα σ' όλη την παρέα.
Ζητώ την βοήθειά σας ώστε στην Βάση-Δείγμα να μετατρέπεται το ποσό σε κείμενο.
Στηρίζομαι σε μια καταπληκτική εφαρμογή που προτάθηκε στο Forum, αλλά δεν καταφέρνω να την προσαρμόσω σε μ' ένα!

Στην 2η Βάση-Δείγμα εμφανίζει το μήνυμα: Περιορίστε τα δεκαδικά ψηφία σε 2!
Πως μπορεί να τροποποιηθεί η συνάρτηση ΝumToWords ώστε να μετατρέπει αριθμούς και με πάνω από 2 δεκαδικά ψηφία;

Tasos 11-02-12 14:39

Καλημέρα Χρήστο!

Αντικατέστησε τον κώδικα της φόρμας με τον παρακάτω κώδικα:


Κώδικας:

Option Explicit

Private Sub Form_Load()
    ChckShowCur = GetSetting("Acc", "ConvToString", "ShowCurrency", True)
    Me.OptCharCase = GetSetting("Acc", "ConvToString", "OptCharCase", 0)

End Sub

Private Sub ChckShowCur_Click()
    SaveSetting "Acc", "ConvToString", "ShowCurrency", ChckShowCur
End Sub

Private Sub OptCharCase_AfterUpdate()
    SaveSetting "Acc", "ConvToString", "OptCharCase", Nz(Me.OptCharCase, 0)
    Me.Refresh
End Sub

Function NumToWordsWithMoreDecimals(myValue, Optional CharCase%, _
                                    Optional EurosAndCents As Boolean = True) As String
    Dim strTemp As String, strTemp1 As String, tmpValue As String


    If Int(myValue) = myValue Then
        NumToWordsWithMoreDecimals = NumToWords(myValue, CharCase, EurosAndCents)
        Exit Function
    End If
        tmpValue = Mid(myValue - Int(myValue), 3)
        If Len(tmpValue) < 3 Then
            NumToWordsWithMoreDecimals = NumToWords(myValue, CharCase, EurosAndCents)
            Exit Function
        End If
       
        strTemp = NumToWords(Int(myValue), 0, EurosAndCents)
        myValue = Mid(myValue - Int(myValue), 3)

        If myValue = 1 Then
            strTemp1 = " " & ChrW(954) & ChrW(945) & ChrW(953) & " " & _
                      NumToWords(myValue, 0, False) & " " & _
                      ChrW(955) & ChrW(949) & ChrW(960) & ChrW(964) & ChrW(972)

        ElseIf Len(myValue) = 2 Then
            strTemp1 = " " & ChrW(954) & ChrW(945) & ChrW(953) & " " & _
                      NumToWords(myValue, 0, False) _
                    & " " & ChrW(955) & ChrW(949) & ChrW(960) & ChrW(964) & ChrW(940)

        Else

            strTemp1 = " " & ChrW(954) & ChrW(945) & ChrW(953) & " " & NumToWords(myValue, 0, False)

        End If

        strTemp = StrConv(strTemp & strTemp1, vbLowerCase)

        If CharCase = 0 Then
            strTemp = UCase(Left(strTemp, 1)) & Mid(strTemp, 2)
        ElseIf CharCase = 1 Then
            strTemp = UCase(strTemp)
        ElseIf CharCase = 2 Then
            strTemp = StrConv(strTemp, vbProperCase)
        End If
        If CharCase = 1 Or CharCase = 2 Then
            strTemp = Replace(strTemp, ChrW(911), ChrW(937))
            strTemp = Replace(strTemp, ChrW(910), ChrW(933))
            strTemp = Replace(strTemp, ChrW(905), ChrW(919))
            strTemp = Replace(strTemp, ChrW(906), ChrW(921))
            strTemp = Replace(strTemp, ChrW(904), ChrW(917))
            strTemp = Replace(strTemp, ChrW(908), ChrW(927))
            strTemp = Replace(strTemp, ChrW(902), ChrW(913))
          If CharCase = 1 Then strTemp = Replace(strTemp, ChrW(962), ChrW(931))
        End If
        NumToWordsWithMoreDecimals = strTemp
   
End Function

Κατόπιν στο πεδίο της φόρμας "NumberInWords" χρησιμοποίησε τον τύπο:

=IIf([poso] Is Null;Null;NumToWordsWithMoreDecimals([Poso];[OptCharCase];[ChckShowCur]))


Με τις αναγραφόμενες αλλαγές θα μπορούν να μετατρέπονται και αριθμοί που
περιέχουν περισσότερα από 2 δεκαδικά ψηφία.

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

Τάσος

Χρήστος 11-02-12 14:58

Κάπου έχω πρόβλημα:
0,3473 € ---> Μηδέν Και ΤρειΣ ΧιλιάδεΣ Τετρακόσια Εβδομήντα Τρία

Και κάτι άλλο: η συνάρτηση μπορεί να "κοιτάει" τον αριθμό ΜΕΤΑ την στρογγυλοποίηση (πχ 0,3273-->0,35) και να γράφει 0 Ευρώ και 35 Λεπτά;

Tasos 11-02-12 19:13

Χρήστο για την πρώτη σου ερώτηση, μπορείς να ξαναπάρεις τον διορθωμένο κώδικα από το προηγούμενο μου μήνυμα.

Όσο για τη στρογγυλοποίηση δεν σε κατάλαβα.

Από τη μια θέλεις να εμφανίζεις περισσότερα δεκαδικά και από την άλλη να τα στρογγυλοποιείς σε 2;;;

Αν θέλεις να στρογγυλοποιήσεις τα ποσά σου μπορείς να χρησιμοποιήσεις:

=IIf([poso] Is Null;Null;NumToWords(Round([Poso];2);[OptCharCase];[ChckShowCur]))

που σημαίνει ότι δεν θα χρειαστείς τη συνάρτηση NumToWordsWithMoreDecimals από το προηγούμενο μήνυμα.

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

Φιλικά

Τάσος

Χρήστος 11-02-12 19:23

Θα μελετήσω αυτό που μου λες!

Χρήστος 11-02-12 20:17

Τάσο δεν τα καταφέρνω, αλλά έχω μια δυο παρατηρήσεις.
1. Θέλω η συνάρτηση να δίνει ολογράφως Το Πρώτο Γράμμα Κάθε Λέξης Κεφαλαίο. (καμμιά άλλη επιλογή!)
2. Να Κοιτάει ένα πεδίο και ανεξάρτητα απ' το πλήθος των δεκαδικών ψηφίων , Να κάνει στρογγυλοποίηση σε 2 δεκ. ψηφία και να δίνει το κείμενο
πχ 2,34 να δίνει 2 ευρώ και τριαντα τέσσερα λεπτά
αλλά και
2,346 να δίνει 2 ευρώ και τριάντα πέντε λεπτά.
Συγνώμη ρε Τάσο αν σε κούρασα, αλλά στηρίζομαι στην βοήθειά σου!
Η φόρμα που θα δουλέψεις είναι η TotalPriceofOrders2Sub

Tasos 11-02-12 20:46

Χρήστο

1. Άνοιξε το συνημμένο που μόλις ανέβασες.

2. Στην καρτέλα Εξωτερικά δεδομένα πάτησε το κουμπί Access όπου με τη βοήθεια του οδηγού
θα μπορέσεις να εισάγεις τη λειτουργική μονάδα "mdlFunc" από το πρώτο αρχείο που ανέβασες. Αποθήκευσε.

3. Στην προέλευση στοιχείου ελέγχου του πεδίου NumberInWords της φόρμας TotalPriceofOrders2Sub πέρασε το παρακάτω:

=IIf([TotalPrice] Is Null;Null;NumToWords(Round([TotalPrice];2);2))



Τάσος

Χρήστος 11-02-12 21:07

Φίλε Τάσο σ' ευχαριστώ για την άμεση ανταπόκριση.
Λειτουργεί όπως ακριβώς θέλω!!


Η ώρα είναι 06:01.

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


Search Engine Optimization by vBSEO 3.3.2