Hàm đọc số dùng mã Unicode

Do môi trường VBA chưa hỗ trợ Unicode đầy đủ nên

việc thiết lập hàm đọc số tiếng Việt với mã (font)

Unicode trong Access cũng như Excel có khó khăn.

Bài viết này giới thiệu một cách thiết lập hàm đọc số

dùng font Unicode trong Access (bạn cũng có thể áp

dụng trong Excel, VB...). Các bước thực hiện như

sau:

1. Mở CSDL Access.

2. Tạo một form đặt tên là FormTam, trên

FormTam tạo hai label:

LabSo, nhập chuỗi: “không một hai ba bốn năm sáu

bảy tám chín mốt lẻ lăm mươi mười trăm ”, cuối

chuỗi có một khoảng trắng.

LabDonvi, nhập chuỗi: “đồng. nghìn triệu tỷ”, cuối

chuỗi cũng có khoảng trắng.

3. Trong Module, nhấn New để tạo mới một module

với tên mặc định là Module1. Sau đó nhấn Design để

vào cửa sổ soạn code và nhập đoạn mã sau:

Khai báo 2 biến toàn cục là 2 mảng chứa chuỗi ký tự

số và chuỗi đơn vị được lấy từ LabSo và LabDonvi

thông qua thủ tục Docchu và Docdonvi.

Public Solay(0 To 15) As String

Public Donvilay(0 To 4) As String

Private Sub Docchu() 'Lấy chuỗi chữ số từ LabSo đặt

vào mảng Solay

Dim tp, Stp, ii

ii = 0: tp = Form_FormTam.LabSo.Caption

Stp = InStr(tp, “ “)

Do While Stp <> 0

Solay(ii) = Left(tp, Stp)

tp = Right(tp, Len(tp) - Stp)

1Stp = InStr(tp, “ “)

ii = ii + 1

Loop

End Sub

Private Sub Docdonvi() Lấy chuỗi đơn vị từ

LabDonvi đặt vào mảng Donvilay

Dim tp, Stp, ii

ii = 0: tp = Form_FormTam.LabDonvi.Caption

Stp = InStr(tp, “ “)

Do While Stp <> 0

Donvilay(ii) = Left(tp, Stp)

tp = Right(tp, Len(tp) - Stp)

Stp = InStr(tp, “ “)

ii = ii + 1

Loop

End Sub

Tạo hàm đọc số:

Public Function DocVND(Sodoc As String) As

String

If Len(Sodoc) > 12 Then

DocVND = “So qua lon qua hang tram ty. Hay xem

lai!”

Exit Function

End If

Sodoc = Round(Sodoc, 0)

Dim Cht As String

Dim fg0 As Boolean

Dim fg1 As Boolean

Dim So As String

Dim ch As String

Dim tp As String

Dim i As Byte

Dim dv

Dim chs

Docchu Gọi hàm đọc chữ số

chs = Solay

Docdonvi Gọi hàm đọc đơn vị

dv = Donvilay

Do While Sodoc <> “”

Cht = “”

If Len(Sodoc) <> 0 Then

If (Len(Sodoc) >= 3) Then

So = Right(Sodoc, 3)

Else

So = Right(Sodoc, Len(Sodoc))

End If

Sodoc = Left(Sodoc, Len(Sodoc) - Len(So))

If Left(So, 1) = “0” And Mid(So, 2, 1) = “0” And

Right(So, 1) = “0” Then

ch = ch

Else

If Len(So) = 3 Then

If Left(So, 1) <> “ “ Then

Cht = chs(Left(So, 1)) + chs(15

End If

So = Right(So, 2)

End If

If Len(So) = 2 Then

If Left(So, 1) = “0” Then

If Right(So, 1) <> “0” Then

Cht = Cht + chs(11)

End If

fg0 = True

Else

If Left(So, 1) = “1” Then

Cht = Cht + chs(14)

Else

Cht = Cht + chs(Left(So, 1)) + chs(13)

fg1 = True

End If

End If

So = Right(So, 1)

End If

If Right(So, 1) <> 0 Then

If Left(So, 1) = “5” And Not fg0 Then

If Len(tp) = 1 Then

Cht = Cht + chs(4)

Else

Cht = Cht + chs(12)

End If

Else

If Left(So, 1) = 1 And Not (Not fg1 Or fg0) And Cht

<> “” Then

Cht = Cht + chs(10)

Else

Cht = Cht + chs(Left(So, 1))

End If

End If

End If

ch = Cht + dv(i) + ch

End if

i = i + 1

End If

Loop

If Right(Trim(ch), 1) <> “.” Then

ch = ch + dv(0)

End If

DocVND=UCase(Left(ch, 1))&Mid(ch,2)

End Function

Ở đây tôi không phân tích hàm đọc số bởi TGVT đã

có bài về vấn đề này (TGVT A 3/2001, t.76; 7/2001,

t.88).

4. Sử dụng hàm DocVND

Tạo một Textbox có tên là Text1, nhấn phải lên

Text1 chọn Build Event, trong Choose Builder chọn

Code Builder và nhấn OK. Cửa sổ Microsoft VB hiện

ra, nhập đoạn code sau:

Private Sub Text1_BeforeUpdate(Cancel As Integer)

Ketqua.Caption = DocVND(Text1.Text)

End Sub

theo PCWorld Vietnam