📄 modalphanumber.bas
字号:
Attribute VB_Name = "modAlphaNumber"
Option Explicit
'数字转英文金额
Dim English_arr(90) As String
Dim b_dim As String
Dim q_dim As String
Dim bw_dim As String
Public Function AlphaNumber(ByVal curValue As Currency) As String
English_arr(1) = "ONE"
English_arr(2) = "TWO"
English_arr(3) = "THREE"
English_arr(4) = "FOUR"
English_arr(5) = "FIVE"
English_arr(6) = "SIX"
English_arr(7) = "SEVEN"
English_arr(8) = "EIGHT"
English_arr(9) = "NINE"
English_arr(10) = "TEN"
English_arr(11) = "ELEVEN"
English_arr(12) = "TWELVE"
English_arr(13) = "THIRTEEN"
English_arr(14) = "FOURTEEN"
English_arr(15) = "FIFTEEN"
English_arr(16) = "SIXTEEN"
English_arr(17) = "SEVENTEE"
English_arr(18) = "EIGHTEEN"
English_arr(19) = "NINETEEN"
English_arr(20) = "TWENTY"
English_arr(30) = "THIRTY"
English_arr(40) = "FORTY"
English_arr(50) = "FIFTY"
English_arr(60) = "SIXTY"
English_arr(70) = "SEVENTY"
English_arr(80) = "EIGHTY"
English_arr(90) = "NINETY"
b_dim = "HUNDRED" '百
q_dim = "THOUSAND" '千
bw_dim = "MILLION" '百万
'获取输入字串
Dim text_dim As String
text_dim = curValue
Dim zs_dim As String '装整数
Dim xs_dim As String '装小数
zs_dim = ""
xs_dim = "" '装翻译好的英语单词
Dim fy_dim As String
fy_dim = "" '首先判断输入的数据是否为数字
If IsNumeric(text_dim) Then '判断字串中是否包含小数
Dim xsd_dim As Integer '装小数点位置
xsd_dim = InStr(text_dim, ".")
If xsd_dim <> 0 Then
'整数部分不能超过9
If Len(Left(text_dim, xsd_dim - 1)) > 9 Then
MsgBox "注意整数部分不能超过9位,否则我不懂的翻!!!", 0 + 16, "提示"
Else
zs_dim = Left(text_dim, xsd_dim - 1)
End If
'小数部分不能超过2位,否则自动截取
xs_dim = Mid(text_dim, xsd_dim + 1, 2)
If Len(Mid(text_dim, xsd_dim + 1)) > 2 Then
MsgBox "注意小数部分不能超过2位,否则我不懂的翻,所以我自动截留两位!!!", 0 + 16, "提示"
curValue = zs_dim & "." & xs_dim
End If
Else
'整数部分不能超过9
If Len(text_dim) > 9 Then
MsgBox "注意整数部分不能超过9位,否则我不懂的翻!!!", 0 + 16, "提示"
Else
zs_dim = text_dim
End If
End If
'开始翻译了,将整数部分不足9位的,前面补足0
zs_dim = String(9 - Len(zs_dim), "0") & zs_dim
'将9位整数拆分为三组,每组3个数字,然后用翻译函数译出3个基本数再用相关量词联接
'呵呵,这里涉及到英语翻译的知识了,本人英语极差,所以不肯造次,就不多说了
If fy_sub(Left(zs_dim, 3)) <> "" Then
fy_dim = fy_sub(Left(zs_dim, 3)) & " " & bw_dim & " "
End If
If fy_sub(Mid(zs_dim, 4, 3)) <> "" Then
fy_dim = fy_dim & fy_sub(Mid(zs_dim, 4, 3)) & " " & q_dim & " "
End If
If fy_sub(Mid(zs_dim, 7, 3)) <> "" Then
fy_dim = fy_dim & fy_sub(Mid(zs_dim, 7, 3)) & " "
End If
'翻译小数位
If xs_dim <> "" Then
If Len(xs_dim) = 1 Then '如果只有一个小数位,则在后面补一个0
xs_dim = xs_dim & "0"
End If
If fy_sub("0" & xs_dim) <> "" Then
fy_dim = fy_dim & "AND CENTS " & fy_sub("0" & xs_dim)
End If
End If
AlphaNumber = fy_dim
Else
MsgBox "请注意,必须输入有效数字!!!", 0 + 16, "提示"
End If
End Function '此函数功能是将最基本的翻译元素,即将需要翻译的数字截成3个一组的元素,然后翻译这三个基本元素.
Private Function fy_sub(ys As String)
Dim ys_dim As String '装需要翻译的字符
Dim fy_dim As String '用于装翻译好的英文
ys_dim = ys
fy_dim = ""
If ys_dim = "000" Then '如果参数为"000",则表示这个元素段是空的,不需要翻译,直接返回空字符
fy_sub = ""
Else
'将元素分解成单个的数字
Dim s1_dim As Integer
Dim s2_dim As Integer
Dim s3_dim As Integer
s1_dim = CInt(Left(ys_dim, 1))
s2_dim = CInt(Mid(ys_dim, 2, 1))
s3_dim = CInt(Mid(ys_dim, 3, 1))
If s1_dim <> 0 Then '如果第一个数字不为0,则读入相对应的英文单词
fy_dim = English_arr(s1_dim) & " " & b_dim & " "
End If
If s2_dim <> 0 Then
If s2_dim = 1 Then '如果数2等于1,则读入从10-19的相对应的英文单词
fy_dim = fy_dim & English_arr(CInt(CStr(s2_dim) & CStr(s3_dim)))
Else
fy_dim = fy_dim & English_arr(CInt(CStr(s2_dim) & "0"))
If s3_dim <> 0 Then
fy_dim = fy_dim & "-"
End If
End If
End If
If s3_dim <> 0 Then '如果数3不等0,并且数2不等于1,则读入相应的英文单词
If s2_dim <> 1 Then
fy_dim = fy_dim & English_arr(s3_dim)
End If
End If
fy_sub = fy_dim
End If
End Function
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -