กระทู้เก่าบอร์ด อ.Yeadram
1,759 7
URL.หัวข้อ /
URL
แปลงตัวเลขเป็นอักษรบน Access2007 อ่านไม่รู้เรื่องค
เรียนถามครับ
ผมคัดลอกโมดูลของกระทู้เก่ามาครับ เรื่องแปลงตัวเลข เป็น อักษรครับ
ก็ทำถูกวิธี คำนวณให้ แต่ผลอักษรมันไขว้ไปมา อ่านไม่รู้เรื่อง เป็นเพราะสาเหตุใดครับ รบกวนหน่อยครับ
ผมคัดลอกโมดูลของกระทู้เก่ามาครับ เรื่องแปลงตัวเลข เป็น อักษรครับ
ก็ทำถูกวิธี คำนวณให้ แต่ผลอักษรมันไขว้ไปมา อ่านไม่รู้เรื่อง เป็นเพราะสาเหตุใดครับ รบกวนหน่อยครับ
7 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R06770
ตรวจสอบแล้วก็ใช้ได้นี่คับ
3 @R06775
ลองแก้ของเก่าเป็น 3 บรรทัดนี้ดู ผมว่าจำนวน space ใน string ของเดิมไม่น่าจะถูกต้อง
DigitName = "ศูนย์หนึ่งสอง สาม สี่ ห้า หก เจ็ด แปด เก้า " ' name of digit number
DigitName1 = "ยี่ สาม สี่ ห้า หก เจ็ด แปด เก้า " ' name of digit number in another call
UnitName = "แสน ล้าน สิบ ร้อย พัน หมื่น" ' name of digit base
DigitName = "ศูนย์หนึ่งสอง สาม สี่ ห้า หก เจ็ด แปด เก้า " ' name of digit number
DigitName1 = "ยี่ สาม สี่ ห้า หก เจ็ด แปด เก้า " ' name of digit number in another call
UnitName = "แสน ล้าน สิบ ร้อย พัน หมื่น" ' name of digit base
4 @R06783
ขอบคุณครับ ผมลองทำแล้วครับ แต่ บางตัวเลขก็คำนวนไม่ได้
ที่ได้ หลัก ร้อย พัน หมื่น แสน ล้าน ได้ แต่ หลัก 10 ไม่ได้ เพราะอะไรครับ
เช่น 10-90 บาท ทำไม่ได้ แต่ 100-900 บาท ได้ครับ มันเยื่องแล้วคำนวนผิด
ยกตัวอย่างอีกครับ ถ้า 999,999 มันจะเป็น
เก้าแสนเก้าหมื่นเก้าพันเก้าร้อยสิบเก้าบาทถ้วน เป็นต้น มันไม่คำนวณหลักสิบให้
แก้ยังไงครับ ขอบคุณครับ
ที่ได้ หลัก ร้อย พัน หมื่น แสน ล้าน ได้ แต่ หลัก 10 ไม่ได้ เพราะอะไรครับ
เช่น 10-90 บาท ทำไม่ได้ แต่ 100-900 บาท ได้ครับ มันเยื่องแล้วคำนวนผิด
ยกตัวอย่างอีกครับ ถ้า 999,999 มันจะเป็น
เก้าแสนเก้าหมื่นเก้าพันเก้าร้อยสิบเก้าบาทถ้วน เป็นต้น มันไม่คำนวณหลักสิบให้
แก้ยังไงครับ ขอบคุณครับ
5 @R06784
เอาใหม่ DigitName1 = " ยี่ สาม สี่ ห้า หก เจ็ด แปด เก้า "
6 @R06786
ขอบคุณครับ พี่สันติสุข เส้นผมบังภูเขาจริง ๆ ครับ ได้แล้วครับ
พี่ครับ ทำไมผมใช้เครื่องตัวผมเอง สามารถดูอักษรจำนวนเงินได้
แต่ว่า ผม Copy File ไปเอาเครื่องอื่น มันไม่คำนวณให้ให้ครับ
มันขึ้น #name? อย่างนี้ แต่กลับผมลอง Copy ไปไว้ที่เครื่องก็ดูได้ครับ
ต้องทำยังไงดีครับ
ขอบคุณครับ พี่ ๆ
พี่ครับ ทำไมผมใช้เครื่องตัวผมเอง สามารถดูอักษรจำนวนเงินได้
แต่ว่า ผม Copy File ไปเอาเครื่องอื่น มันไม่คำนวณให้ให้ครับ
มันขึ้น #name? อย่างนี้ แต่กลับผมลอง Copy ไปไว้ที่เครื่องก็ดูได้ครับ
ต้องทำยังไงดีครับ
ขอบคุณครับ พี่ ๆ
7 @R06787
พี่ครับ ผมทำได้แล้ว ไปปลดล๊อก มาโครครับ
Time: 0.2040s
ค่าผมใส่ 100 บาท แปลงเป็นตัวอักษรที่ได้มาคือ หนึ่่นบาทถ้วน
ผม Copy มาจากกระทู้ที่นี่ครับ และทำตามพี่ ๆครับ
Function BahtText(InputCurrency As Currency) As String
Dim DigitSave, UnitSave, DigitName, DigitName1, UnitName, Satang, StrTmp, StrTmp1 As String
Dim DecimalValue, CurrDigit, PrevDigit, StrLen, DigitBase, ScanDigit As Integer
Dim IntegerValue As Double
' init variable
DigitName = "ศูนย์ หนึ่ง สอง สาม สี่ ห้า หก เจ็ด แปด เก้า" ' name of digit number
DigitName1 = "ยี่ สาม สี่ ห้า หก เจ็ด แปด เก้า" ' name of digit number in another call
UnitName = "แสน ล้าน สิบ ร้อย พัน หมื่น" ' name of digit base
BahtText = ""
Satang = ""
' check for negative val
If InputCurrency < 0 Then
InputCurrency = -InputCurrency
BahtText = "ลบ"
End If
StrTmp1 = Format(InputCurrency, "0.00") ' rounds up to 2 decimals
InputCurrency = Val(StrTmp1)
IntegerValue = Int(InputCurrency) ' get integer value
DecimalValue = (InputCurrency - IntegerValue) * 100 ' get 2 decimal values
' check for zeto val
If IntegerValue = 0 And DecimalValue = 0 Then
Satang = "ศูนย์บาทถ้วน"
GoTo locExit
End If
' translate integer val to name if necesary
If IntegerValue > 0 Then
StrTmp = Left(StrTmp1, Len(StrTmp1) - 3) ' get string of integer val
StrLen = Len(StrTmp) ' get string len
CurrDigit = 0
' scan integer string and compute its name
For ScanDigit = StrLen To 1 Step -1
' save previous digit
PrevDigit = CurrDigit
' get digit base
DigitBase = ScanDigit Mod 6
' convert digit character to numeric value
CurrDigit = Asc(Mid(StrTmp, StrLen - ScanDigit + 1, 1)) - 48
' get unit name from its base
UnitSave = RTrim(Mid(UnitName, DigitBase * 5 + 1, 5))
' get number name from Currdigit, depends on the digit base
DigitSave = RTrim(Mid(IIf(DigitBase = 2, DigitName1, DigitName), CurrDigit * 5 + 1, 5))
' base ten and number 1
If DigitBase = 1 And CurrDigit = 1 And PrevDigit <> 0 Then
DigitSave = "เอ็ด"
End If
' first digit base may be base million or 1
If DigitBase = 1 And ScanDigit < 6 Then
UnitSave = ""
End If
' ignore add digit name in result string if it is zero
If CurrDigit <> 0 Then
BahtText = BahtText + DigitSave + UnitSave
ElseIf DigitBase = 1 Then
BahtText = BahtText + UnitSave
End If
Next ScanDigit
BahtText = BahtText + "บาท"
End If
' if no decimal value
If DecimalValue = 0 Then
Satang = "ถ้วน"
' compute decimal val to name, there are only 2 digit
Else
StrTmp = Right(StrTmp1, 2)
' name ot first digit
CurrDigit = Asc(Left(StrTmp, 1)) - 48
PrevDigit = CurrDigit
If CurrDigit > 0 Then
Satang = RTrim(Mid(DigitName1, CurrDigit * 5 + 1, 5)) + "สิบ"
End If
' name of last digit
CurrDigit = Asc(Right(StrTmp, 1)) - 48
If CurrDigit > 0 Then
Satang = Satang + IIf(CurrDigit = 1 And PrevDigit <> 0, "เอ็ด", RTrim(Mid(DigitName, CurrDigit * 5 + 1, 5)))
End If
' store result and unit
Satang = Satang + "สตางค์"
End If
locExit:
' store result to BahtText
BahtText = BahtText + Satang
End Function