กระทู้เก่าบอร์ด อ.Yeadram
5,041 19
URL.หัวข้อ /
URL
การใช้งาน Bahtonly
ก่อนหน้านี้ผมเคยถามเรื่องการดึง Bahttext โดยใช้ฟังชั่นจาก Excel
เเต่ตอนนี้เขาให้เปลี่ยนเป็นเเปลงตัวเลขเป็นอักษรภาษาอังกฤษ
ผมจึงอยากทราบวิธีกาดึงครับ
Code เก่าผม
Private Sub Command159_Click()
IsSaveClicked = True
Me.Dirty = False
MsgBox "ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂáÅéÇ"
End Sub
Function ExcelBathtext(value As Double) As String
If value = 0 Then
ExcelBathtext = ""
Else
ExcelBathtext = WorksheetFunction.BahtText(value)
End If
End Function
Private Sub cmdBahtOnly_Click()
alphabet.value = ExcelBathtext(grant_tot.value)
End Sub
Private Sub Command71_Click()
DoCmd.OpenReport "invoice_report_001", acViewPreview, , "[invoiceid] = " & Me.invoiceid.value
alphabet.value = ExcelBathtext(grant_tot.value)
End Sub
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If MsgBox("¡ÃسҺѹ·Ö¡¢éÍÁÙÅ", vbQuestion + vbYesNo, "Save Record?") = vbYes Then
IsSaveClicked = True
Me.Dirty = False
MsgBox "ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂáÅéÇ"
Else
IsSaveClicked = False
End If
Response = acDataErrContinue
End Sub
Private Sub Command63_Click()
DoCmd.RunCommand acCmdSaveRecord
MsgBox "¢éÍÁÙÅ·Ó¡Òúѹ·Ö¡àÃÕºÃéÍÂáÅéÇ", vbOKOly, "á¨é§Ê¶Ò¹ÐºÑ¹·Ö¡"
Me.Recalc
alphabet.value = ExcelBathtext(grant_tot.value)
End Sub
Private Sub Command72_Click()
On Error GoTo Err_Command72_Click
DoCmd.GoToRecord , , acNewRec
Exit_Command72_Click:
Exit Sub
Err_Command72_Click:
MsgBox Err.Description
Resume Exit_Command72_Click
End Sub
---------------------------------
ผมได้ Add-in ฟังชั้น BahtOnly มาไว้ใน Excel เเล้วครับ เเต่ไม่ทราบว่าจะสามารถดึงมาใช้งานได้เหมือนกันหรือไม่
หรือ มีวิธีที่ง่ายกว่านี้หรือเปล่าครับ
เช่น 245.30 = Two Hundred Forty Five Bahts and Thirty Satangs
เเต่ตอนนี้เขาให้เปลี่ยนเป็นเเปลงตัวเลขเป็นอักษรภาษาอังกฤษ
ผมจึงอยากทราบวิธีกาดึงครับ
Code เก่าผม
Private Sub Command159_Click()
IsSaveClicked = True
Me.Dirty = False
MsgBox "ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂáÅéÇ"
End Sub
Function ExcelBathtext(value As Double) As String
If value = 0 Then
ExcelBathtext = ""
Else
ExcelBathtext = WorksheetFunction.BahtText(value)
End If
End Function
Private Sub cmdBahtOnly_Click()
alphabet.value = ExcelBathtext(grant_tot.value)
End Sub
Private Sub Command71_Click()
DoCmd.OpenReport "invoice_report_001", acViewPreview, , "[invoiceid] = " & Me.invoiceid.value
alphabet.value = ExcelBathtext(grant_tot.value)
End Sub
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If MsgBox("¡ÃسҺѹ·Ö¡¢éÍÁÙÅ", vbQuestion + vbYesNo, "Save Record?") = vbYes Then
IsSaveClicked = True
Me.Dirty = False
MsgBox "ºÑ¹·Ö¡¢éÍÁÙÅàÃÕºÃéÍÂáÅéÇ"
Else
IsSaveClicked = False
End If
Response = acDataErrContinue
End Sub
Private Sub Command63_Click()
DoCmd.RunCommand acCmdSaveRecord
MsgBox "¢éÍÁÙÅ·Ó¡Òúѹ·Ö¡àÃÕºÃéÍÂáÅéÇ", vbOKOly, "á¨é§Ê¶Ò¹ÐºÑ¹·Ö¡"
Me.Recalc
alphabet.value = ExcelBathtext(grant_tot.value)
End Sub
Private Sub Command72_Click()
On Error GoTo Err_Command72_Click
DoCmd.GoToRecord , , acNewRec
Exit_Command72_Click:
Exit Sub
Err_Command72_Click:
MsgBox Err.Description
Resume Exit_Command72_Click
End Sub
---------------------------------
ผมได้ Add-in ฟังชั้น BahtOnly มาไว้ใน Excel เเล้วครับ เเต่ไม่ทราบว่าจะสามารถดึงมาใช้งานได้เหมือนกันหรือไม่
หรือ มีวิธีที่ง่ายกว่านี้หรือเปล่าครับ
เช่น 245.30 = Two Hundred Forty Five Bahts and Thirty Satangs
19 Reply in this Topic. Dispaly 1 pages and you are on page number 1
1 @R17304
ทำไมไม่เอา Code มาใส่ใน Access เลยล่ะครับ จะได้ไม่ต้องดึงจาก Excel
2 @R17307
ครับผมคือตอนนี้ผมก็อยากได้ Code มาวางเลยนะครับ
เช่นตอนนี้ผมได้ Code มาเเล้ว
เเล้วได้สร้าง Module ขึ้นมาชื่อ BahtText เเล้วนำ Code ไปวางในนั้น
เช่นตามนี้
-------------------------------------------
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
--------------------------------------
--------------------------------------
- จากรูปที่ 2 ผมต้องการให้เเสดงอักษรใน Textbox ชื่อ BahtText
- เมื่อมีการกดปุ่มบันทึกข้อมูล ในปุ่ม command63
- ข้อมูลที่จะนำมาเเสดงจะอยู่ใน Textbox ชื่อ grant_tot
รบกวนด้วยครับ ผมได้อ่านจากในหลายๆท่านเเล้วยังงงๆนะครับ เลยอยากจะให้อธิบายจากของผมเลย มีอะไรจะให้เพิ่มเติมเเจ้งได้นะครับ ขอบคุณอีกครั้งครับ
เช่นตอนนี้ผมได้ Code มาเเล้ว
เเล้วได้สร้าง Module ขึ้นมาชื่อ BahtText เเล้วนำ Code ไปวางในนั้น
เช่นตามนี้
-------------------------------------------
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
--------------------------------------
--------------------------------------
- จากรูปที่ 2 ผมต้องการให้เเสดงอักษรใน Textbox ชื่อ BahtText
- เมื่อมีการกดปุ่มบันทึกข้อมูล ในปุ่ม command63
- ข้อมูลที่จะนำมาเเสดงจะอยู่ใน Textbox ชื่อ grant_tot
รบกวนด้วยครับ ผมได้อ่านจากในหลายๆท่านเเล้วยังงงๆนะครับ เลยอยากจะให้อธิบายจากของผมเลย มีอะไรจะให้เพิ่มเติมเเจ้งได้นะครับ ขอบคุณอีกครั้งครับ
3 @R17308
--------------------------------------
4 @R17309
ที่ Text Box ที่แสดงตัวเลข ให้เปลี่ยนชื่อหน่อยนะครับ
อาจเปลี่ยนเป็น txtGrandTot
ส่วน Text Box ที่แสดงข้อความให้กำหนด Control Source เป็น
=BahtText([txtGrandTot])
อาจเปลี่ยนเป็น txtGrandTot
ส่วน Text Box ที่แสดงข้อความให้กำหนด Control Source เป็น
=BahtText([txtGrandTot])
5 @R17311
ทำการเเก้ไข เเล้วครับในช่องตัวอักษรขี้น #Name?
ครับต้องเเก้ไขตรงไหนบ้างรบกวนอีกทีครับ
ขอบคุณครับ
ครับต้องเเก้ไขตรงไหนบ้างรบกวนอีกทีครับ
ขอบคุณครับ
6 @R17313
รบกวนแปะรูปให้ดูหน่อยครับ
1. txtGrandTot
2. Text Box แสดงข้อความตัวเลข
ขอเห็น Properties แสดง Name, Control Source
1. txtGrandTot
2. Text Box แสดงข้อความตัวเลข
ขอเห็น Properties แสดง Name, Control Source
7 @R17314
ตามนี้ครับ
ตามนี้ครับ
8 @R17315
9 @R17316
10 @R17317
ส่งไฟล์มาให้ดูดีกว่าครับ คงมีอะไรผิดที่ไหนซักแห่ง
11 @R17318
ผมทำไฟล์ตัวอย่างไว้ให้แล้วนะครับ
ทิ้งอีเมลไว้ละกัน เดี๋ยวจะได้ส่งให้
ทิ้งอีเมลไว้ละกัน เดี๋ยวจะได้ส่งให้
12 @R17335
ขอบคุณมากครับ E-Mail : auyzeed@mail.com
เด๋วผมอัพไฟล์ส่งให้ครับ
เด๋วผมอัพไฟล์ส่งให้ครับ
13 @R17336
เเก้ไขครับ
ขอบคุณมากครับ E-Mail : auyzeed@gmail.com
เด๋วผมอัพไฟล์ส่งให้ครับ
ขอบคุณมากครับ E-Mail : auyzeed@gmail.com
เด๋วผมอัพไฟล์ส่งให้ครับ
14 @R17337
http://cloud.northgatebangkok.com/owncloud/public.php?service=files&t=a646f396b0b3990c64f43473436f9254
http://cloud.northgatebangkok.com/owncloud/public.php?service=files&t=f8a6f76be5fdfc35ec835e1ba9c40003
ไฟล์ตามนี้นะครับ ขอบคุณมากนะครับที่ช่วยเป็นธุระให้
จะมี 2 ไฟล์ คือไฟล์ ที่ใช้ฟังชั่นจาก Excel
และไฟล์ จาก VB Code
บอกตามตรงเลยครับไม่เคยเขียนโปรเเกรม Access เลยงมไม่ถูกครับ
ขอบคุณครับ
http://cloud.northgatebangkok.com/owncloud/public.php?service=files&t=f8a6f76be5fdfc35ec835e1ba9c40003
ไฟล์ตามนี้นะครับ ขอบคุณมากนะครับที่ช่วยเป็นธุระให้
จะมี 2 ไฟล์ คือไฟล์ ที่ใช้ฟังชั่นจาก Excel
และไฟล์ จาก VB Code
บอกตามตรงเลยครับไม่เคยเขียนโปรเเกรม Access เลยงมไม่ถูกครับ
ขอบคุณครับ
15 @R17338
แฮกเลย ปัญหาซับซ้อนมากมาย
บอกตามตรง (อย่าโกรธกันเน้อ ถ้าโกรธก็ขอโทษจริงๆ)
1. vba bahttext ที่คุณใส่มานั้น ไม่ OK ครับ เพราะการตัดคำไม่ถูกต้อง
2. มันมี Name: BahtText ซ้ำ ซึ่งผมหาไม่เจอว่ามันซ้ำกันที่ไหน
ผมถึงได้พยายามสอนนักเรียนของผมว่าเวลาตั้งชื่อ Control ให้แบ่งโดยใช้ Prefix เข้าช่วย เช่น
Table ก็ใช้ tblชื่อตาราง เช่น tblCustomer, tblData อะไรงี้
ซึ่งการใช้ Prefix นี้เขามาชื่อว่า "Hungarian notation" เพราะมีการใช้งานกันจริงๆ เวลาเขียน Code เริ่มจาก C ก่อน แล้วมา VB แล้วก็มาที่ Access
ดังนั้นใช้กันนะครับ เวลาแก้ Code จะได้ไม่ยาก แล้วจะไม่ค่อยเกิด Error แบบที่คุณพบ
(บ่นมาก เดี๋ยวโดนโกรธ)
ตอนนี้ผมแก้ไข BahtText ของคุณแล้วนะครับ สามารถใช้งานได้แล้ว เดี๋ยวจะส่งกลับไปทางอีเมล
ผมแก้ Code ให้แล้วนะครับ
และผมเปลี่ยนชื่อ BahtText ของคุณเป็น newBahtText ทดสอบแล้ว OK
บอกตามตรง (อย่าโกรธกันเน้อ ถ้าโกรธก็ขอโทษจริงๆ)
1. vba bahttext ที่คุณใส่มานั้น ไม่ OK ครับ เพราะการตัดคำไม่ถูกต้อง
2. มันมี Name: BahtText ซ้ำ ซึ่งผมหาไม่เจอว่ามันซ้ำกันที่ไหน
ผมถึงได้พยายามสอนนักเรียนของผมว่าเวลาตั้งชื่อ Control ให้แบ่งโดยใช้ Prefix เข้าช่วย เช่น
Table ก็ใช้ tblชื่อตาราง เช่น tblCustomer, tblData อะไรงี้
ซึ่งการใช้ Prefix นี้เขามาชื่อว่า "Hungarian notation" เพราะมีการใช้งานกันจริงๆ เวลาเขียน Code เริ่มจาก C ก่อน แล้วมา VB แล้วก็มาที่ Access
ดังนั้นใช้กันนะครับ เวลาแก้ Code จะได้ไม่ยาก แล้วจะไม่ค่อยเกิด Error แบบที่คุณพบ
(บ่นมาก เดี๋ยวโดนโกรธ)
ตอนนี้ผมแก้ไข BahtText ของคุณแล้วนะครับ สามารถใช้งานได้แล้ว เดี๋ยวจะส่งกลับไปทางอีเมล
ผมแก้ Code ให้แล้วนะครับ
และผมเปลี่ยนชื่อ BahtText ของคุณเป็น newBahtText ทดสอบแล้ว OK
16 @R17340
โอ้วๆ ขอบคุณมากครับผม
ผมจะพยายามศึกษาข้อผิดพลาดต่อไป
ขอบคุณอีกครั้งครับ
ผมจะพยายามศึกษาข้อผิดพลาดต่อไป
ขอบคุณอีกครั้งครับ
17 @R17344
http://cloud.northgatebangkok.com/owncloud/public.php?service=files&t=a646f396b0b3990c64f43473436f9254
http://cloud.northgatebangkok.com/owncloud/public.php?service=files&t=f8a6f76be5fdfc35ec835e1ba9c40003
ขอโทดนะครับ ลิ้งเสีย อยากได้โค้ดเอาไปศึกษาต่ออะครับ รบกวนช่วยอัพให้ใหม่ด้วยนะครับ ขอบคุณครับ
http://cloud.northgatebangkok.com/owncloud/public.php?service=files&t=f8a6f76be5fdfc35ec835e1ba9c40003
ขอโทดนะครับ ลิ้งเสีย อยากได้โค้ดเอาไปศึกษาต่ออะครับ รบกวนช่วยอัพให้ใหม่ด้วยนะครับ ขอบคุณครับ
18 @R17369
เด็กใหม่หัดทำ
บอก Mail มาครับเด๋วผมส่งให้ครับเนื่องจากผมได้ปิดไปเเล้ว
บอก Mail มาครับเด๋วผมส่งให้ครับเนื่องจากผมได้ปิดไปเเล้ว
19 @R17372
myimportantmy@yahoo.com ขอบคุณมากครับ ถ้ามีปัญหาตรงไหนที่ไม่เข้าใจ เดี๋ยวผม mail ไปถามนะครับ
Time: 0.3515s