2024年6月15日发(作者:)
Word VBA:小写数字转换为大写数字
声明:原创内容,转发请注明出处及作者,盗版必究
作者:柴大人
QQ:24823610
使用方法:
把代码制作成宏(具体方法请自查),然后拉选需要转换的数字后执行宏,转换后会自动把结果复制到剪贴板
上,直接在需要插入大写数字的地方粘贴即可。在OFFICE 2013 64位中测试正常。
转换效果:
123456789
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元整
123456789.12
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角贰分
123456789.02
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元零贰分
123456789.1
壹亿贰仟叁佰肆拾伍万陆仟柒佰捌拾玖元壹角整
123000789
壹亿贰仟叁佰万零柒佰捌拾玖元整
源码:
Declare PtrSafe Function OpenClipboard Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
Declare PtrSafe Function SetClipboardData Lib "user32" (ByVal Format As LongPtr, ByVal hMem As
LongPtr) As LongPtr
Declare PtrSafe Function CloseClipboard Lib "user32" () As LongPtr
Declare PtrSafe Function EmptyClipboard Lib "user32" () As LongPtr
Declare PtrSafe Function GlobalAlloc Lib "kernel32" (ByVal Flags As LongPtr, ByVal length As
LongPtr) As LongPtr
Declare PtrSafe Function GlobalLock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
Declare PtrSafe Function GlobalUnlock Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
Declare PtrSafe Function GlobalFree Lib "kernel32" (ByVal hMem As LongPtr) As LongPtr
Declare PtrSafe Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (ByVal pDest As LongPtr,
ByVal pSource As LongPtr, ByVal length As LongPtr)
Sub Transform()
Dim Capital, Unit, Number, Capacity, Integers, Decimals, R1, R2, PrintOut, TempA, LastZero
Dim hMem As LongPtr, lHwnd As LongPtr
Capital = "壹贰叁肆伍陆柒捌玖"
Unit = "元拾佰仟万拾佰仟亿"
Number = ()
Number = e(Number, Chr(10), "")
Number = e(Number, Chr(13), "")
LastZero = 0
If ric(Number) Then
Integers = Int(Number)
If Int(Number) <> (Number) Then
Decimals = Replace((Number, 2), Integers & ".", "")
Else
Decimals = ""
End If
For R1 = 0 To Len(Integers) - 1
TempA = Mid(Integers, Len(Integers) - R1, 1)
If TempA = 0 And LastZero = 0 Then
PrintOut = "零" & PrintOut
LastZero = 1
ElseIf TempA > 0 Then
PrintOut = Mid(Capital, CInt(TempA), 1) & Mid(Unit, R1 + 1, 1) & PrintOut
LastZero = 0
End If
Select Case R1
Case 4
If (PrintOut, "万") = 0 Then PrintOut = "万" & PrintOut
End Select
Next R1
If (PrintOut, "元") = 0 Then PrintOut = PrintOut & "元"
Select Case Len(Decimals)
Case 0
PrintOut = PrintOut & "整"
Case 1
PrintOut = PrintOut & Mid(Capital, CInt(Left(Decimals, 1)), 1) & "角整"
Case 2
If CInt(Left(Decimals, 1)) > 0 Then
PrintOut = PrintOut & Mid(Capital, CInt(Left(Decimals, 1)), 1) & "角"
Else
PrintOut = PrintOut & "零"
End If
PrintOut = PrintOut & Mid(Capital, CInt(Right(Decimals, 1)), 1) & "分"
End Select
hMem = GlobalAlloc(&H42, LenB(PrintOut) + 2)
lHwnd = GlobalLock(hMem)
CopyMemory lHwnd, StrPtr(PrintOut), LenB(PrintOut) + 2
GlobalUnlock (hMem)
OpenClipboard (0)
EmptyClipboard
SetClipboardData 13, hMem
CloseClipboard
End If
End Sub


发布评论