[FONKSiYON] Sayıyı yazıya çevirmede kuruşta hata veriyor
#1
Merhaba
Sayın Taruz arkadaşımızın sayıyı yazıya çevirme modulunu kullanıyorum.
Modul:

Function YTL(sayi)
On Error GoTo Taruz

X = InStr(1, sayi, ",")
If X > 0 Then
Lira = yaz$(Mid(sayi, 1, X - 1)) & " TÜRK LİRASI "
TempKurus = Mid(sayi, X + 1, 98)
If Len(TempKurus) = 1 Then TempKurus = TempKurus * 10
If Len(TempKurus) > 2 Then TempKurus = Mid(TempKurus, 1, 2)
Kurus = yaz$(TempKurus) & " KURUŞ"
Else
Lira = yaz$(sayi) & " TÜRK LİRASI "
End If


YTL = Lira & Kurus
Taruz:
Exit Function
End Function

'
Function yaz$(sayi)
Dim B$(9)
Dim Y$(9)
Dim M$(4)
Dim V$(15)
Dim C$(3)
B$(0) = ""
B$(1) = "BİR"
B$(2) = "İKİ"
B$(3) = "ÜÇ"
B$(4) = "DÖRT"
B$(5) = "BEŞ"
B$(6) = "ALTI"
B$(7) = "YEDİ"
B$(8) = "SEKİZ"
B$(9) = "DOKUZ"
Y$(0) = ""
Y$(1) = "ON"
Y$(2) = "YİRMİ"
Y$(3) = "OTUZ"
Y$(4) = "KIRK"
Y$(5) = "ELLİ"
Y$(6) = "ALTMIŞ"
Y$(7) = "YETMIŞ"
Y$(8) = "SEKSEN"
Y$(9) = "DOKSAN"
M$(0) = "TRİLYON"
M$(1) = "MİLYAR"
M$(2) = "MİLYON"
M$(3) = "BİN"
M$(4) = ""
A$ = Str(sayi)
If Left$(A$, 1) = "" Then pozitif = 1 Else pozitif = 0
A$ = Right$(A$, Len(A$) - 1)
For X = 1 To Len(A$)
If (Asc(Mid$(A$, X, 1)) > Asc("9")) Or (Asc(Mid$(A$, X, 1)) < Asc("0")) Then GoTo hata
Next X
If Len(A$) > 15 Then GoTo hata
A$ = String(15 - Len(A$), "0") + A$
For X = 1 To 15
V(X) = Val(Mid$(A$, X, 1))
Next X
A$ = ""
For X = 0 To 4
C(1) = V((X * 3) + 1)
C(2) = V((X * 3) + 2)
C(3) = V((X * 3) + 3)
If C(1) = 0 Then
E$ = ""
ElseIf C(1) = 1 Then
E$ = "YÜZ"
Else
E$ = B$(C(1)) + "YÜZ"
End If
E$ = E$ + Y$(C(2)) + B$(C(3))
If E$ <> "" Then E$ = E$ + M$(X)
If X = 3 And E$ = "BİRBİN" Then E$ = "BİN"
S$ = S$ + E$
Next X
If S$ = "" Then S$ = "SIFIR"
If pozitif = 0 Then S$ = "" + S$
yaz$ = S$
GoTo tamam
hata: yaz$ = "hata"
tamam:
End Function


kendi yapmış olduğum bilgisayarlarımda hiç hata vermedi. Bugün Fatura programı olarak başka iki bilgisayara yükledim. Bilgisayarın birinde çevirmede hata yazdı.Diğer bilgisayarda hata yok. Dikkat ettim hata 125,18 TL gibi kuruşlar sıfır olmadığında verdi. Yani 125.00TL olursa hata vermeden çeviriyor.Ama 125,18 TL olursa hata mesajı veriyor. Bu sorun Bilgisayarda diye düşünüyorum ama bir türlü bulamadım.Yardımcı olabilir misiniz.



  Alıntı
Bu mesajı beğenenler:
#2
selam
alttaki kodu denermisiniz

Visual Basic
  1. = ParaCevir([Tutar])


Visual Basic
  1. Public Function ParaCevir(para)
  2. Dim ParaStr As String
  3. Dim TL As String, Kurus As String
  4. Dim sifirsa As String
  5. Dim ve As String
  6. If Not IsNumeric(para) Then GoTo SayiDegil
  7. ParaStr = Format(Abs(para), "0.00")
  8. TL = Left(ParaStr, Len(ParaStr) - 3)
  9. Kurus = right(ParaStr, 2)
  10. If Cevir(Kurus) = "Sıfır" Then sifirsa = "" Else sifirsa = Cevir(Kurus) & " " & pgparabirimalt
  11. If Cevir(Kurus) = "Sıfır" Then ve = "" Else ve = ", "
  12. ParaCevir = IIf(para < 0, "Eksi ", "- ") & Cevir(TL) & " " & pgparabirim & ve & sifirsa & " -"
  13. Exit Function
  14. SayiDegil:
  15. ParaCevir = ""
  16. End Function


Visual Basic
  1. Private Function Cevir(SayiStr As String) As String
  2. On Error GoTo fazlarakam
  3. Dim Rakam(15)
  4. Dim c(3), sonuc, e
  5. Birler = Array("", " Bir ", " İki ", " Üç ", " Dört ", " Beş ", " Altı ", " Yedi ", " Sekiz ", " Dokuz ")
  6. Onlar = Array("", " On ", " Yirmi ", " Otuz ", " Kırk ", " Elli ", " Altmış ", " Yetmiş ", " Seksen ", " Doksan ")
  7. Binler = Array("Trilyon", "Milyar", "Milyon", "Bin ", "")
  8. SayiStr = String(15 - Len(SayiStr), "0") + SayiStr
  9. For i = 1 To 15
  10. Rakam(i) = Val(Mid$(SayiStr, i, 1))
  11. Next i
  12. sonuc = ""
  13. For i = 0 To 4
  14. c(1) = Rakam(i * 3 + 1)
  15. c(2) = Rakam(i * 3 + 2)
  16. c(3) = Rakam(i * 3 + 3)
  17. If c(1) = 0 Then
  18. e = ""
  19. ElseIf c(1) = 1 Then
  20. e = "Yüz "
  21. Else
  22. e = Birler(c(1)) + "Yüz"
  23. End If
  24. e = e + Onlar(c(2)) + Birler(c(3))
  25. If e <> "" Then e = e + Binler(i)
  26. If (i = 3) And (e = " Bir Bin ") Then e = "Bin "
  27. sonuc = sonuc + e
  28. Next i
  29. fazlarakam:
  30. If Err = 5 Then: sonuc = "Yanlış Değer Girildi"
  31. If sonuc = "" Then sonuc = "Sıfır"
  32. Cevir = UCase(Mid(sonuc, 1, 1)) + Mid(sonuc, 2, Len(sonuc) - 1)
  33. End Function





  Alıntı
Bu mesajı beğenenler:
#3
Sn nevgür; Taruz hocanin yontemine ilave
Function YTL(sayi)
On Error GoTo Taruz
X = IIf(InStr(1, sayi, ".") > 0, Replace(sayi, ".", ","), sayi)
X = InStr(1, sayi, ",")
....
end function
veya
X = InStr(1, Replace(sayi, ".", ","), ",")

Sanirim calismayan bilgisayarin bolge ve dil ayarlarinda ondalik birimi nokta ile ayarlanmis. Koyu yazan satiri kodunuza ilave ederseniz, hata almazsiniz.



  Alıntı
Bu mesajı beğenenler:
#4
Teşekkürler... Hemen deneyeceğim.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  2 Sayıyı Toplama omergenc7 2 289 20-01-2025, 12:58
Son Mesaj: omergenc7
  Nerde Hata Yapıyorum SBNS 3 353 21-10-2024, 20:38
Son Mesaj: halily
  [FORM] Dcount Hata Veriyor TheREDROSE 4 360 04-08-2024, 15:12
Son Mesaj: TheREDROSE
  [FONKSiYON] Fonksiyonda Hata zimbit 1 321 12-02-2024, 18:52
Son Mesaj: dsezgin
  [VBA] Dosya Yolu Boş Ise Hata Alıyorum serdem48 4 447 26-10-2023, 14:11
Son Mesaj: serdem48
  Sayıyı Sese çevirme adnnfrm 19 2.302 23-07-2023, 18:32
Son Mesaj: onur_can
  Nz(me.recordset.absoluteposition, 0) + 1 Komutu Sil Eyleminden Sonra Hata Veriyor. programmer67 2 422 12-04-2023, 09:00
Son Mesaj: programmer67
  Ikon Eklerken Hata orhnkprn 2 354 27-01-2023, 00:54
Son Mesaj: BeyTor

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi