设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3156|回复: 4
打印 上一主题 下一主题

[基础应用] 数字转人民币大写金额的vba方法在2007中不通用阿?

[复制链接]
跳转到指定楼层
1#
发表于 2008-4-29 10:12:39 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按照微软的帮助,http://support.microsoft.com/kb/890704/zh-cn

在本例中,我们事先自定义一个函数,然后再利用自定义的函数来实现自动转换,具体的操作步骤如下:

执行菜单栏中的【工具】|【宏】|【Visual Basic编辑器】命令,进入“Visual Basic编辑”窗口。
在“Visual Basic编辑”窗口中,执行菜单栏中的【插入】|【模块】命令,插入一个模块(如图1所示)。双击左侧的“模块1”,在窗口右边展开“模块1(代码)”编辑窗口,输入如下代码:

Function dx(q)

ybb = Round(q * 100) '将输入的数值扩大100倍,进行四舍五入
y = Int(ybb / 100) '截取出整数部分
j = Int(ybb / 10) - y * 10 '截取出十分位
f = ybb - y * 100 - j * 10 '截取出百分位
zy = Application.WorksheetFunction.Text(y, "[DBNum2][$-804]G/通用格式") '将整数部分转为中文大写
zj = Application.WorksheetFunction.Text(j, "[DBNum2][$-804]G/通用格式") '将十分位转为中文大写
zf = Application.WorksheetFunction.Text(f, "[DBNum2][$-804]G/通用格式") '将百分位转为中文大写
dx = zy & "元" & "整"
d1 = zy & "元"

If f <> 0 And j <> 0 Then
  dx = d1 & zj & "角" & zf & "分"
  If y = 0 Then                                                                                                                                 
                   dx = zj & "角" & zf & "分"
         End If
End If

If f = 0 And j <> 0 Then
   dx = d1 & zj & "角" & "整"                                  
   If y = 0 Then
      dx = zj & "角" & "整"  
   End If
End If

If f <> 0 And j = 0 Then
  dx = d1 & zj & zf & "分"
  If y = 0 Then
     dx = zf & "分"
  End If
End If

If q = "" Then
   dx = 0 '如没有输入任何数值为0
End If

End Function
输入完成后,关闭VBA编辑窗口返回工作表状态。
在D13单元格中输入公式:=dx(F12),确认后即可将F12单元格中所示的小写数字金额转换为大写的数字金额,并将结果显示在D13单元格中,如图2所示。

用excel2007做下来单元格显示出来的不是大写金额,而是以下内容:
/通用格式元整

是不是哪里错了?请求援助。

[ 本帖最后由 shawb 于 2008-4-29 10:15 编辑 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-4-29 13:13:22 | 只看该作者
改成:
zy = Application.WorksheetFunction.Text(y, "[DBNum2]") '将整数部分转为中文大写
zj = Application.WorksheetFunction.Text(j, "[DBNum2]") '将十分位转为中文大写
zf = Application.WorksheetFunction.Text(f, "[DBNum2]") '将百分位转为中文大写
3#
 楼主| 发表于 2008-4-29 14:46:53 | 只看该作者
谢谢你的回复,这下单元格显示:

#NAME?

晕。

我的具体做法是:

1。打开excel2007,对着表标签,右键“查看代码”;
2。在Visual Basic中新建了一个模块,输入以上代码;
3。然后回到工作表中使用 =dx() 函数,计算结果是上面那样。

继续求解。

[ 本帖最后由 shawb 于 2008-4-29 14:52 编辑 ]
4#
 楼主| 发表于 2008-4-29 14:59:07 | 只看该作者
没有问题了,关闭再打开一下就好了。谢谢你。

想让大写金额前再出现“人民币”三个字,程序里加在哪里?

[ 本帖最后由 shawb 于 2008-4-29 15:03 编辑 ]
5#
 楼主| 发表于 2008-4-29 15:24:35 | 只看该作者
好了,我弄好了:

Function dx(q)

ybb = Round(q * 100)        '将输入的数值扩大100倍,进行四舍五入
y = Int(q)                  '截取出整数部分
j = Int(ybb / 10) - y * 10  '截取出十分位
f = ybb - y * 100 - j * 10  '截取出百分位

zy = Application.WorksheetFunction.Text(y, "[DBNum2]") '将整数部分转为中文大写
zj = Application.WorksheetFunction.Text(j, "[DBNum2]") '将十分位转为中文大写
zf = Application.WorksheetFunction.Text(f, "[DBNum2]") '将百分位转为中文大写
dx = "人民币" & zy & "圆" & "整"
d1 = "人民币" & zy & "圆"

If f <> 0 And j <> 0 Then
    dx = d1 & zj & "角" & zf & "分"
    If y = 0 Then
        dx = zj & "角" & zf & "分"
    End If
End If

If f = 0 And j <> 0 Then
    dx = d1 & zj & "角" & "整"
    If y = 0 Then
        dx = "人民币" & zj & "角" & "整"
    End If
End If

If f <> 0 And j = 0 Then
    dx = d1 & zj & zf & "分"
    If y = 0 Then
        dx = "人民币" & zf & "分"
    End If
End If

If q = "" Then
    dx = "表格填写尚未完成"   '空白时返回值
End If

End Function
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-14 10:56 , Processed in 0.084397 second(s), 28 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表