Hàm đọc số thành chữ trong Access

Liên hệ QC

nguyentrungse7en

Thành viên mới
Tham gia
14/6/10
Bài viết
7
Được thích
3
Tớ đang làm thêm cho công ty dược công việc là xuất hóa đơn và kiểm kho. Tớ làm mọt ct quản lý hóa đơn rồi nhưng còn phần quan trọng nhất là đọc số tiền bằng chữ trong report xuất hóa đơn. Tớ có tìm hiểu nhưng bác Lai chỉ giới thiệu các tạo một form nhập số rùi enter ra số tiền. Nhưng thế thì chưa thỏa mãn nhu cầu thực tế là sử dụng nó như một hàm và gọi lên bất cứ nơi nào trong report cơ, ex: text10=docso(text5) (với text5 là tổng tiền). Bác Lai hướng dẫn tạo bẳng chứa các giá trị gì đó mà tới bó tay.
Các sư huynh sư phụ chí giáo giúm tớ gấp nhé! Tớ van lạy ngàn lần!
(có đính kèm chương trình)
 

File đính kèm

  • QuanlyBanHang Lafon.rar
    312.5 KB · Đọc: 1,216
Không có Bác Lai, có Bác chết tiệt thôi.
Phải insert 1 module và nhét 1 hàm VBA zô đó.
Xem cú pháp hàm trong report hoá đơn
 

File đính kèm

  • QuanlyBanHang Lafon.rar
    324.7 KB · Đọc: 1,022
Mình đã tạo cho bạn một modules trong file access và gửi lại nó cho bạn đây này !
bạn disign report XUATHOADONTINH xem text55 phần Control Source =VND(sum([thucthu]))
 

File đính kèm

  • QuanlyBanHang Lafon.rar
    342.2 KB · Đọc: 1,881
Qua file đính kèm các Bạn đã làm được nhiều rồi đó, Mình đã test qua:

Mình thấy có thể sửa chữ "ngàn" thành chữ "nghìn" như vậy sẽ phù hợp với người ngoài băc.
Rất mong các Bạn cố gắng sửa nhé.
Qua đây xin cảm ơn Anh Lai nhiều!

"Giúp một người bằng mười điều thiện"

Các Bạn có thể tham khảo đoạn mã này nó đang bị lỗi ở số 9.
Function Demtien(ByVal s As String) As String
Dim So
Dim hang
So = Array("kh«ng", "mét", "hai", "ba", "bèn", "n¨m", "s¸u", "b¶y", "t¸m", "chY'n")

hang = Array(" ", "ngh×n", "triÖu", "tû")
Dim i, j, DonVi, chuc, Tram As Integer
Dim str As String
str = " "
i = Len(s)
If i = 0 Then
str = So(0) & str
Else
j = 0
Do While i > 0
DonVi = Int(Mid(s, i, 1))
i = i - 1
If i > 0 Then
chuc = Int(Mid(s, i, 1))
Else
chuc = -1
End If

i = i - 1
If i > 0 Then
Tram = Int(Mid(s, i, 1))
Else
Tram = -1
End If
i = i - 1
If DonVi > 0 Or chuc > 0 Or Tram > 0 Or j = 3 Then
str = hang(j) & " " & str
End If
j = j + 1
If j > 3 Then
j = 1
End If
If DonVi = 1 And chuc > 1 Then
str = So(chuc) & " mèt" & " " & str
Else
If DonVi = 5 And chuc > 0 Then
str = "l¨m" & " " & str
ElseIf DonVi > 0 Then
str = So(DonVi) & " " & str
End If
If chuc < 0 Then
Exit Do
Else
If chuc = 0 And DonVi > 0 Then
str = "lÎ" & " " & str
ElseIf chuc = 1 Then str = "m­êi" & " " & str
ElseIf chuc > 1 Then str = So(chuc) & " " & "m­¬i" & " " & str
End If
End If
End If
If Tram < 0 Then
Exit Do
Else
If Tram > 0 Or chuc > 0 Or DonVi > 0 Then
str = So(Tram) & " " & "tr¨m" & " " & str
End If
End If
Loop
'§æi kư tù ®Çu chuçi str thµnh ch÷ hoa( ®©y lµ ®o¹n thªm vµo)
Dim g As String
g = UCase(Left(Trim(str), 1))
str = g + Mid(Trim(str), 2)
Demtien = str
'hƠt phÇn ®æi ch÷ thµnh ch÷ hoa
End If
Demtien = str
End Function

Mình đang đọc trong unicode.
Các Bạn nhớ gửi lại cho mình theo email: gialilamait@gmail.com
Mình xin cảm ơn nhiều.
 
Bạn dò trong đoạn code xem có chữ nào là "ngh×n" thì bạn thay thế thành chữ "ngµn" là được.
 
Về bài dịch số tôi thấy có rất nhiều, mỗi người dùng một cú pháp khác nhau ví dụ: "DịchVND()","Doc_soVND()", "...". Đặt giả thiết có thể tổng hợp lại thành một cú pháp dùng chung không? Đơn giản là mọi thành viên cùng sử dụng một hàm hoặc khó hơn là tự động chuyển về một hàm được thống nhất. Mọi người thử nghĩ xem.
 
Tớ đang làm thêm cho công ty dược công việc là xuất hóa đơn và kiểm kho. Tớ làm mọt ct quản lý hóa đơn rồi nhưng còn phần quan trọng nhất là đọc số tiền bằng chữ trong report xuất hóa đơn. Tớ có tìm hiểu nhưng bác Lai chỉ giới thiệu các tạo một form nhập số rùi enter ra số tiền. Nhưng thế thì chưa thỏa mãn nhu cầu thực tế là sử dụng nó như một hàm và gọi lên bất cứ nơi nào trong report cơ, ex: text10=docso(text5) (với text5 là tổng tiền). Bác Lai hướng dẫn tạo bẳng chứa các giá trị gì đó mà tới bó tay.
Các sư huynh sư phụ chí giáo giúm tớ gấp nhé! Tớ van lạy ngàn lần!
(có đính kèm chương trình)

bạn tạo 1 modules nhu sau va luu lai no, khi su dung chi can danh tên hàm vnd( dia chi so tien ) thế là nó cho kết quả

===============
HLMT: Bạn nên viết bài = TV có dấu nhé.
 

File đính kèm

  • VND.xls
    38 KB · Đọc: 278
Chỉnh sửa lần cuối bởi điều hành viên:
Cái này mình vẫn còn không hiểu lắm, nhưng mà cho mình hỏi, mình đang sử dụng access 2007 và muốn nó hiện chữ theo bộ gõ Unicode thì làm thế nào cho nó đơn giản nhất? Bạn nào biết thì chỉ mình với, search trên google thì không thấy, làm thử nhiều cách nhưng cái chữ nó hiện ra thì lỗi tùm lum, không đọc được :(
 
Cái này mình vẫn còn không hiểu lắm, nhưng mà cho mình hỏi, mình đang sử dụng access 2007 và muốn nó hiện chữ theo bộ gõ Unicode thì làm thế nào cho nó đơn giản nhất? Bạn nào biết thì chỉ mình với, search trên google thì không thấy, làm thử nhiều cách nhưng cái chữ nó hiện ra thì lỗi tùm lum, không đọc được :(
cái này mình làm trên 2010 bạn thử xem nhé, trong khi chờ bài của các cao thủ
 

File đính kèm

  • doctien.rar
    18 KB · Đọc: 315
Cám ơn bạn! Mình đã làm được rồi, nhưng khi sử dụng có 1 vấn đề. Vd: Mình cần đọc số 315.000.000 đ, thì nó đọc là "Ba trăm mười năm triệu đồng./." Hic, thấy nó sao sao đó, có cách nào cho nó đọc là "Ba trăm mươi lăm triệu đồng" không?
 
Lần chỉnh sửa cuối:
Cám ơn bạn! Mình đã làm được rồi, nhưng khi sử dụng có 1 vấn đề. Vd: Mình cần đọc số 315.000.000 đ, thì nó đọc là "Ba trăm mười năm triệu đồng./." Hic, thấy nó sao sao đó, có cách nào cho nó đọc là "Ba trăm mươi lăm triệu đồng" không?
thử lại file này xem đúng ý bạn chưa nhe



bài trên thiếu mất hàng đơn vị, bạn tải lại file nhe
 

File đính kèm

  • ThemDonVi.rar
    18.8 KB · Đọc: 363
Lần chỉnh sửa cuối:
Mình thấy code này khá hoàn hảo. Nhưng MissDragon88 có thể hỗ trợ mình code đọc tiền USD được không. Vì mình xuất biên nhận USD. Nếu được cho mình sđt hoặc email. Mình xin hậu tạ. Ngọc Niệm 090-138-2323
 
Lần chỉnh sửa cuối:
thử lại file này xem đúng ý bạn chưa nhe



bài trên thiếu mất hàng đơn vị, bạn tải lại file nhe
Code bác hay quá, nhưng mà e muốn xóa dấu phẩy phân chia đơn bị thì sao bác. Ví du: Một triệu, một trăm ngàn đồng -> Một triệu một trăm ngàn đồng
 
Hàm Access đọc không được sau dấu phẩy từ 01 đến 09 ( ví dụ 1: 1,01 đọc: Một phẩy một; đúng: Một phẩy lẻ một) => bạn nào biết sua giúp mình . cảm ơn.
Function DocSoRaChuUNI(Number As Double)
Dim MyArray: Dim i As Integer
Dim Str As String
If Number >= 1E+18 Then DocSoRaChuUNI = "#NUM!": Exit Function
Str = Format(Fix(Abs(Number)), "000000000000000000")
MyArray = Array("không ", "m" & ChrW(7897) & "t ", "hai ", "ba ", "b" & ChrW(7889) & "n ", "n" & ChrW(259) & "m ", "sáu ", "b" & ChrW(7843) & "y ", "tám ", "chín ", "tri" & ChrW(7879) & "u ", "ngàn ", "t" & ChrW(7927) & " ", "tri" & ChrW(7879) & "u ", "ngàn ", "", "tr" & ChrW(259) & "m ", "m" & ChrW(432) & ChrW(417) & "i ", "không " & "m" & ChrW(432) & ChrW(417) & "i" & " không ", "không " & "m" & ChrW(432) & ChrW(417) & "i", "l" & ChrW(7867), "m" & ChrW(432) & ChrW(417) & "i" & " không", "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " n" & ChrW(259) & "m", "m" & ChrW(432) & ChrW(417) & "i" & " l" & ChrW(259) & "m", "m" & ChrW(7897) & "t " & "m" & ChrW(432) & ChrW(417) & "i", "m" & ChrW(432) & ChrW(7901) & "i", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7897) & "t", "m" & ChrW(432) & ChrW(417) & "i" & " m" & ChrW(7889) & "t", "Âm ", "ph" & ChrW$(7849) & "y ", " ", "mét vuông")
For i = 1 To Len(Str)
If Left(Str, i) <> 0 And Mid(Str, (Int((i + 2) / 3) - 1) * 3 + 1, 3) <> 0 Then
DocSoRaChuUNI = DocSoRaChuUNI & MyArray(Mid(Str, i, 1)) & MyArray(-(9 + i / 3) * (i Mod 3 = 0) - (15 + i Mod 3) * (i Mod 3 <> 0))
ElseIf i = 9 And Mid(Str, 7, 3) = 0 And Left(Str, 6) <> 0 Then
DocSoRaChuUNI = DocSoRaChuUNI & MyArray(12)
End If
Next
DocSoRaChuUNI = IIf(Number = 0, MyArray(0), "") & IIf(Fix(Number) <> 0, DocSoRaChuUNI, "") & IIf(Fix(Number) <> 0 And Fix(Number) <> Number, MyArray(30), "") & IIf(Fix(Number) <> Number, IIf(Abs(Number - Fix(Number)) < 0.1, "", MyArray(Left(Right(Format(Abs(Number), "#.00"), 2), 1)) & MyArray(17)) & MyArray(Right(Format(Number, "#.00"), 1)) & MyArray(32), "")
DocSoRaChuUNI = Replace(Trim(Replace(Replace(Replace(Replace(Replace(Replace(Replace(DocSoRaChuUNI, MyArray(18), MyArray(15)), MyArray(19), MyArray(20)), MyArray(21), MyArray(22)), MyArray(23), MyArray(24)), MyArray(25), MyArray(26)), MyArray(27), MyArray(28)), ", " & MyArray(30), " " & MyArray(30))), MyArray(30) & MyArray(31), Split(MyArray(30), " ")(0) & " " & MyArray(31))
If Number < 0 Then DocSoRaChuUNI = MyArray(29) & DocSoRaChuUNI
DocSoRaChuUNI = UCase(Left(DocSoRaChuUNI, 1)) & Mid(DocSoRaChuUNI, 2) & "."
End Function
 
Web KT
Back
Top Bottom