Access编程交流网
  • 设为首页|收藏本站|繁体中文|手机版
  •     
  • Access培训-Access开发平台-Access行业开发

  • 首页
  • 资讯
  • 技巧
  • 源码
  • 行业
  • 资源
  • 活动
  • 关于

技巧

ACCESS数据库

启动/设置/选项/背景

修复/压缩

安全/加密/解密

快捷键

版本升级/其它等

数据表

命名方式/设计规范

表设计

查询

Sql语言基础

选择查询

更新查询

删除查询

追加查询

生成表查询

交叉表查询

SQL特定查询

查询参数

查询综合应用

界面/窗体/控件

标签

文本框

命令按钮

组合框/列表框

选项组/复选框/选项按钮

选项卡

子窗体

窗体本身/综合应用

其它

报表打印

报表设计

高级报表

模块/函数/VBA/API/系统

VBA基础

内置函数

调试/跟踪/Debug

模块/类模块

API/COM/系统相关

字符数字日期

网络通信游戏

加密解密安全

文件处理

经典算法

宏/菜单/工具栏/功能区

宏/脚本

菜单/工具栏

功能区/Ribbon

图表/图形/图像/多媒体

图表

图形/图像

音频

视频/动画

DAO/链接表/ADO/ADP

DAO/链接表/ODBC

ADO/RDO

ADP

ActiveX/第三方控件/插件

Treeview树控件

ListView列表控件

Toolbar工具栏控件

微软其它控件

Dbi-Tech

CodeJock

Grid++Report

FastReport

ComponentOne

加载项/插件/Addin

OFFICE集成/导入导出/交互

Excel导入导出/交互

Word导入导出/交互

PPT交互

Outlook控制/邮件

Text文本文件/INI/CSV

PDF/SWF/XML格式

CAD格式

Sharepoint/其它Office

SqlServer/其它数据库

表

视图

存储过程/触发器

函数

用户/权限/安全

调试/维护

SqlServer其它/综合

发布/打包/文档/帮助

开发版/运行时

打包/发布/部署

开发文档/帮助制作

Access完整行业系统

采购管理系统

销售管理系统

仓库管理系统

人力资源管理HRM

CRM管理系统

MRP/ERP管理系统

BRP/流程优化

其它管理系统

心得/经验/绝招
其它/杂项
Excel技巧

Excel应用与操作

Excel开发编程

Word技巧

Word应用与操作

Word开发编程

Outlook技巧

Outlook应用与操作

Outlook开发编程

热门文章

  • 判断生日到期天数的函数Ac..
  • 关于 Partition ..
  • 不用API或ADO 获取磁..
  • Access函数判断每月最..
  • Access实现投票系统-..
  • 自动编号的函数

最新文章

  • Access或VB VBA..
  • 关于VBA的0、""(空字..
  • Access导出函数Out..
  • Access日期与日期区间..
  • RecordSource ..
  • Access子窗体事件控制..

联系方式

Access交流网(免费Access交流)

QQ:18449932 

网  址:www.access-cn.com

当前位置:首页 > 技巧 > 模块/函数/VBA/API/系统 > VBA基础
VBA基础

将阿拉伯数字转换为汉字数字,支持到百万亿(比如大写金额)

'例子:
Debug.Print UpNumber(-612325646566.46,0,True )
负陆仟壹佰贰拾叁亿贰仟伍佰陆拾肆万陆仟伍佰陆拾陆圆肆角陆分
Debug.Print UpNumber(-125646566.46,1,True )
负一亿二千五百六十四万六千五百六十六元四角六分
Debug.Print UpNumber(-125646566.46,1,flase )
负一亿二千五百六十四万六千五百六十六点四六

Public Function UpNumber(ByVal Number As Double, Optional ByVal Typ As Long, Optional ByVal IsMoney As Boolean) As String
'********************************************************************************
'--------------------------------------------------------------------------------
'将阿拉伯数字转换为大写字符串
'Version 1.0    2002-02-06
'Version 1.1    2002-04-05  修改到支持到千亿
'Version 1.2    2004-08-14  修改为支持 Typ,IsMoney 参数,转换结果可以不是金额,支持到百万亿
'Version 1.21   2004-08-15  修正 Typ=1 时,不能显示负数的疏忽.
'Roadbeg
'--------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------
'参数说明:
'Number         待转换的数字,可以是小数.
'Typ            转换类型,可选值 0,1
'0              转换为 零,壹,贰 等
'1              转换为 一,二,三 等
'IsMoney        是否是金额,如果是,则转换为多少元,小数后转换为多少角,分,反之则转换为类似于"二点三"这种形式
'--------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------
'返回值说明:
'如果成功,返回转换后的字符串
'如果失败,返回空字符串
'--------------------------------------------------------------------------------
'
'--------------------------------------------------------------------------------
'注意,由于 Double 类型数值范围的原因,此函数最大只支持到百万亿
'没有对 Typ 的值进行检查,如果 Typ 不为 0,1 之一,将会引发错误.
'另,由于 Double 类型数值范围的原因,超过百万亿,将不能显示小数,同样的超过十万亿只能显示一个小数,以此类推.
'--------------------------------------------------------------------------------
'********************************************************************************

On Error GoTo Doerr

    Dim Result As String                        '返回值
    Dim strNumber As String                     '文本型的 Number
    Dim lngNumberLen As Long                    '文本型的 Number 的 Len
   
    Dim strTmp As String
    Dim strFirst As String, strEnd As String
    Dim lngI As Long, lngJ As Long, lngTmp As Long

    Dim strNum(10) As String                    '大写数字
    Dim strUnit(16) As String                   '单位,比如 十,拾,万等
    Dim strUnitB(2) As String                   '小数后的单位
   
    '初始化
    Select Case Typ
        Case 0
            strNum(0) = "零":   strNum(1) = "壹":   strNum(2) = "贰":   strNum(3) = "叁"
            strNum(4) = "肆":   strNum(5) = "伍":   strNum(6) = "陆":   strNum(7) = "柒"
            strNum(8) = "捌":   strNum(9) = "玖"
           
            If IsMoney Then
                strUnit(0) = "圆"
                strUnitB(0) = "角": strUnitB(1) = "分"
            Else
                strUnit(0) = "点"
            End If
           
            strUnit(1) = "拾":  strUnit(2) = "佰":  strUnit(3) = "仟":  strUnit(4) = "万"
            strUnit(5) = "拾":  strUnit(6) = "佰":  strUnit(7) = "仟":  strUnit(8) = "亿"
            strUnit(9) = "拾":  strUnit(10) = "佰": strUnit(11) = "仟": strUnit(12) = "万"
            strUnit(13) = "拾": strUnit(14) = "佰": strUnit(15) = "仟"
           
        Case 1
            strNum(0) = "零":   strNum(1) = "一":   strNum(2) = "二":   strNum(3) = "三"
            strNum(4) = "四":   strNum(5) = "五":   strNum(6) = "六":   strNum(7) = "七"
            strNum(8) = "八":   strNum(9) = "九"
           
            If IsMoney Then
                strUnit(0) = "元"
                strUnitB(0) = "角": strUnitB(1) = "分"
            Else
                strUnit(0) = "点"
            End If
           
            strUnit(1) = "十":  strUnit(2) = "百":  strUnit(3) = "千":  strUnit(4) = "万"
            strUnit(5) = "十":  strUnit(6) = "百":  strUnit(7) = "千":  strUnit(8) = "亿"
            strUnit(9) = "十":  strUnit(10) = "百": strUnit(11) = "千": strUnit(12) = "万"
            strUnit(13) = "十": strUnit(14) = "百": strUnit(15) = "千"
           
        Case Else
            '参数错误
            GoTo Errexit
    End Select
   
    Result = ""
    If Number = 0 Then
        If IsMoney Then
            Result = strNum(0) & strUnit(0) & "整"
        Else
            Result = strNum(0)
        End If
    Else
        If IsMoney Then
            strNumber = Trim(str(FormatCurrency(Number, 2, vbTrue, vbFalse, vbFalse)))       '保留两位小数
        Else
            strNumber = Trim(str(Number))                                                    '简单的转换为字符串型
        End If
        lngNumberLen = Len(strNumber)
       
        If Left(strNumber, 1) = "-" Then                    '处理负数
            strFirst = "负"
            strNumber = Right(strNumber, lngNumberLen - 1)
            lngNumberLen = lngNumberLen - 1
        Else
            strFirst = ""                                   '通常不需要 =""
        End If
       
        lngI = InStrRev(strNumber, ".")
        If lngI Then
            strTmp = Right(strNumber, lngNumberLen - lngI)
            If IsMoney Then
                strTmp = strTmp & "00"
                strEnd = ""                                 '通常不需要 =""
               
                For lngJ = 1 To 2
                    Result = Result & strNum(CLng(Mid$(strTmp, lngJ, 1))) & strUnitB(lngJ - 1)
                Next
            Else
                strTmp = Right(strNumber, lngNumberLen - lngI)
                For lngJ = 1 To lngNumberLen - lngI
                    Result = Result & strNum(CLng(Mid$(strTmp, lngJ, 1)))
                Next
            End If
           
            strNumber = Left(strNumber, lngI - 1)           '去除小数部分
            lngNumberLen = Len(strNumber)                   '新的字符串长度
        Else
            If IsMoney Then
                strEnd = "整"
            Else
                strEnd = ""
            End If
        End If
       
        '以下为主循环部分
        lngI = 0
        For lngJ = lngNumberLen To 1 Step -1
            lngTmp = CLng(Mid$(strNumber, lngJ, 1))
           
            If lngTmp Then
                Result = strNum(lngTmp) & strUnit(lngI) & Result
            Else
                If lngI = 0 Or lngI = 4 Or lngI = 8 Or lngI = 12 Then           '超过 16 位不支持
                    Result = strNum(lngTmp) & strUnit(lngI) & Result
                Else
                    Result = strNum(lngTmp) & Result
                End If
            End If
           
            lngI = lngI + 1
        Next
       
        Result = Replace(Result, strNum(0) & strNum(0), strNum(0))              '零零", "零
        Result = Replace(Result, strNum(0) & strNum(0), strNum(0))              '零零", "零
       
        '亿零万零圆", "亿圆"
        Result = Replace(Result, strUnit(8) & strNum(0) & strUnit(4) & strNum(0) & strUnit(0), strUnit(8) & strUnit(0))
       
        Result = Replace(Result, strUnit(8) & strNum(0) & strUnit(4), strUnit(8) & strNum(0))       '亿零万, "亿零"
        Result = Replace(Result, strUnit(4) & strNum(0) & strUnit(0), strUnit(4) & strUnit(0))      '亿零万", "亿零
       
        Result = Replace(Result, strNum(0) & strUnit(8), strUnit(8))            '零亿
        Result = Replace(Result, strNum(0) & strUnit(4), strUnit(4))            '零万
        Result = Replace(Result, strNum(0) & strUnit(0), strUnit(0))            '零圆
       
        Result = Replace(Result, strNum(0) & strNum(0), strNum(0))              '零零", "零
        Result = Replace(Result, strNum(0) & strNum(0), strNum(0))              '零零", "零
       
        If IsMoney Then
            Result = strFirst & Result & strEnd
        Else
            Result = strFirst & Result
            If Right(Result, 1) = strUnit(0) Then Result = Left(Result, Len(Result) - 1)            '去除最后一个 "点"
        End If
    End If

Complete:
    GoTo Quit
Doerr:
Errexit:
    Result = ""
Quit:
    UpNumber = Result
End Function

发布人:Roadbeg-Access中国  
分享到:
点击次数:  更新时间:2004-08-14 11:16:06  【打印此页】  【关闭】
上一条:关于从ACCESS中向WORD填写数据的问题的说明  下一条:用VBA代码处理菜单和工具栏之五



相关文章

  • • Access或VB VBA判断数组的值是否为空的几种方法
  • • 关于VBA的0、""(空字符串)、Null、Empty、与 Nothing 的区别
  • • Access导出函数OutPutto解释
  • • Access日期与日期区间的筛选
  • • RecordSource SourceObject ControlSource属性的区别
  • • Access子窗体事件控制父窗体
  • • 事件​change和AfterUpdate的区别
  • • 代码修改完善方法示例(初学者必读)

热门文章

  • [2008-12-27] 如何确定某年第N周的第一天日期?access数据库
  • [2013-11-25] mid函数的另类用法access数据库
  • [2017-07-29] Access导出函数OutPutto解释access数据库
  • [2005-08-16] 初识VBA:第七课 使鼠标指向按钮时变成手形access数据库
  • [2005-08-16] 显示一字符串在另一个字符串中出现次数的函数access数据库
  • [2004-01-05] Access取混合字符串的实际长度access数据库

热门产品

公司动态|在线留言|在线反馈|友情链接|会员中心|站内搜索|网站地图

中山市天鸣科技发展有限公司 版权所有 1999-2023 粤ICP备10043721号

QQ:18449932

Access应用 Access培训 Access开发 Access平台

access|数据库|access下载|access教程|access视频|access软件

Powered by MetInfo 5.3.12 ©2008-2025  www.metinfo.cn