VB人啊,前所未有的考验终于来了???

cwm545 2004-03-25 11:37:43
各位师兄:
这可能是我一生中一个重要的转折点,升职,走人。现在我毫无头绪,真的束手无策了。各位以下是我绞尽脑汁都实现不了的:

有两个TextBox,一个用来输入单价,一个则用来输入数量,还有一个按钮就是用来处理的.现在我想把两个相乘的结果,通过按钮转换成大写人民币的格式,并分开填充到:

t1_(佰),t2_(拾),t3_(万),t4_(仟),t5_(佰),t6_(拾),t7_(元),t8_(角),t9_(分)


t1至t9都是TextBox控件,就是把结果格式化,并分开来填充,可是这好像很难啊???
VB的师兄们!给点意见,相关的资料,代码,感激不尽!!!
(注:大写格式,零壹贰叁肆伍陆柒捌玖 )
...全文
22 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
linwinfan 2004-03-25
  • 打赏
  • 举报
回复
'首先注意将那九个控件设为数组控件,好操作些,名为txtDx
dim sTotal as string
dim i as long
dim iTemp as long
dim bFirstZero as boolean
sTotal=format(text1.text*text2.text,"0000000.00")
'去掉小数点
sTotal=replace(stotal,".","")
'开始循坏
bFirstZero=False
for i=1 to 9
iTemp=clng(mid(sTotal,i,1)))
if not bFirstZero then
if iTemp<>0 then
bFirstZero=True
txtDx(i-1).text=numToDx(iTemp)
end if
else
txtDx(i-1).text=numToDx(iTemp)
end if

'上面是按钮处理的过程
'下面是小写转大写的操作很简单,将小写直接替换为大写就可以了
function numToDx(byval i as long) as string
select case i
case 1
numtodx="壹"
'其余的自已写吧,很简单的
end function

victorycyz 2004-03-25
  • 打赏
  • 举报
回复

写出这个就可以升职?有这等好事?
online 2004-03-25
  • 打赏
  • 举报
回复
Private Sub Command1_Click()
Label1.Caption = rmb(Text1.Text)
End Sub

Public Function rmb(s As Currency) As String
s1$ = LTrim(Str$(Abs(s)))
L% = Len(s1)
Select Case L - InStrRev(s1, ".")
'双引号内是小数点
Case L
s2$ = s1 + ".00"
Case 1
s2$ = s1 + "0"
Case 2
s2$ = s1
End Select
L = Len(s2)
DX$ = ""
C1$ = "零壹贰叁肆伍陆柒捌玖"
C2$ = "分角 元拾佰仟万拾佰仟亿拾佰"
'角和元之间留一个空格
Do While L >= 1
x$ = Mid(s2, Len(s2) - L + 1, 1)
DX = DX + IIf(x <> ".", Mid(C1, Val(x) + 1, 1) + Trim(Mid(C2, (L - 1) + 1, 1)), "")
L = L - 1
Loop
rmb = DX + "整"
End Function

啊维 2004-03-25
  • 打赏
  • 举报
回复
这可以放在模块里的啊,调用很简单的,如下:

mUpCurr(要打印的金额,是否显示大写,打印的位数)

其它不用管的
fuanwei 2004-03-25
  • 打赏
  • 举报
回复
dim o as string

for i to len(text1.text)
o=mid(text1.text,i,1)
select case o
case "0"
text3.text="零"
case "1"
text3.text="壹"
case "2"
text3.text="贰"
case "3"
text3.text="叁"
...
...
...
case "9"
text3.text="玖"
case "." (注意一下小数点)
next
sanyou98 2004-03-25
  • 打赏
  • 举报
回复
up
cwm545 2004-03-25
  • 打赏
  • 举报
回复
冰雨师兄:
谢谢,但有没有另外一种方式啊,代码好长啊,我也是刚学的。真的谢谢你了冰雨!!!
啊维 2004-03-25
  • 打赏
  • 举报
回复
调用方法:



mUpCurr(要打印的金额, 1, 3)

1为是否显示"零壹贰叁肆伍陆柒捌玖拾"

3代表要打印的位数
啊维 2004-03-25
  • 打赏
  • 举报
回复
'转换阿拉伯数字为中文大写--------------------------填写发票
'分带单位和不带单位两种方式(按发票格式),最好可设定最高位数
'变量: 值,是否显示单位(0为不显示),发票位数
Public Function mUpCurr(ByVal mCurrVal As Currency, ByVal mUnit As Integer, ByVal mMaxBits As Integer) As String
On Error GoTo mErr:

'整数部分的数字
Dim mInt As String
'小数部分的数字
Dim mDec As String
Dim i As Integer
'所用到的 中文大写 单位(根据发票设定位数从右到左截取)
Dim mChInt As String
'数字的全部中文大写
Const mChNum As String = "零壹贰叁肆伍陆柒捌玖拾"
'仟万位以内的全部整数中文大写
Const mUseChInt As String = "仟佰拾万仟佰拾元"
'小数部分中文大写
Const mChDec As String = "角分"

If mCurrVal < 0 Then mCurrVal = -mCurrVal
'预处理所得到的金额, 只取两位小数
mCurrVal = CCur(FormatNumber(mCurrVal, 2))


'分离整数、小数
If InStr(CStr(mCurrVal), ".") Then
mInt = Split(mCurrVal, ".")(0)
mDec = Split(mCurrVal, ".")(1)
Else
mInt = mCurrVal
End If

'如果超过仟万,不执行,只提示
If mMaxBits > 8 Then
MsgBox "您正在使用亿位的发票?!", vbCritical, mTitle
mUpCurr = ""
Else
If mMaxBits >= Len(mInt) Then
'所用到的单位
mChInt = Right(mUseChInt, mMaxBits)
'必须 补 0(整数、小数分别进行)
Do While Len(mInt) < mMaxBits
mInt = "0" & mInt
Loop
Do While Len(mDec) < 2
mDec = mDec & "0"
Loop

'按整数处理
For i = 1 To Len(mInt)
If mUnit = 0 Then
mUpCurr = mUpCurr & Mid(mChNum, CInt(Mid(mInt, i, 1)) + 1, 1) & " "
Else
mUpCurr = mUpCurr & Mid(mChNum, CInt(Mid(mInt, i, 1)) + 1, 1) & Mid(mChInt, i, 1)

End If
Next i

'按小数处理
For i = 1 To Len(mChDec)
If mUnit = 0 Then
mUpCurr = mUpCurr & Mid(mChNum, CInt(Mid(mDec, i, 1)) + 1, 1) & " "
Else
mUpCurr = mUpCurr & Mid(mChNum, CInt(Mid(mDec, i, 1)) + 1, 1) & Mid(mChDec, i, 1)
End If
Next i
Else
MsgBox "金额大于发票的限额!", vbCritical, mTitle
mUpCurr = ""
End If
End If
Exit Function
mErr:
MsgBox Err.Number & "," & Err.Description, vbCritical, mTitle
End Function

cwm545 2004-03-25
  • 打赏
  • 举报
回复
是啊,基本是可以的,各位谢谢你们,我按照你们所说的方法,调试一下,有什么情况再通知你们。
谢谢!!!

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧