กระทู้เก่าบอร์ด อ.Yeadram
26,519 39
URL.หัวข้อ /
URL
แปลงตัวเลขเป็นตัวอักษร
สร้าง function ตามนี้ครับ
Public Function BahtText(A As Variant)
On Error Resume Next
BahtText = "( " & Excel.WorksheetFunction.BahtText(A) & " )"
End Function
ประมาณนี้ครับผม
Public Function BahtText(A As Variant)
On Error Resume Next
BahtText = "( " & Excel.WorksheetFunction.BahtText(A) & " )"
End Function
ประมาณนี้ครับผม
39 Reply in this Topic. Dispaly 2 pages and you are on page number 2
22 @R06561
ผมไปที่เมนู Tools - Macro - ???? ไม่มี Security มีแต่ขึ้น Macro Name : ด้านล่างเป็นกรอบให้ใส่..... ไม่รู้ผมเข้าผิดที่หรือเปล่า :)
23 @R06562
อ.สันติสุขครับ รบกวนอาจารย์มากเลย
ผมจะลองหาดูอีกทีครับ
เดี๋ยวผมจะไปลองทำ DB เปล่าอีกอันทดสอบ Function อีกทีครับ
ได้ผลอย่างไรจะแจ้งให้ทราบครับ
ขอบคุณอาจารย์มากครับ :)
ผมจะลองหาดูอีกทีครับ
เดี๋ยวผมจะไปลองทำ DB เปล่าอีกอันทดสอบ Function อีกทีครับ
ได้ผลอย่างไรจะแจ้งให้ทราบครับ
ขอบคุณอาจารย์มากครับ :)
24 @R06563
บางครั้งเมนูมันจะถูกซ่อนอยู่ค่ะ ลองขยายออกดูนะคะ
เมื่อขยายออกแล้วจะได้อย่างรูปถัดไปค่ะ
เมื่อขยายออกแล้วจะได้อย่างรูปถัดไปค่ะ
25 @R06564
ไม่ทราบว่าตรงตามที่ต่องการหรือเปล่า
ไม่ทราบว่าตรงตามที่ต่องการหรือเปล่า
26 @R06567
ผมใช้ Access 2007 ครับ ไม่ทราบว่าเข้าตรงไหนครับ :)
ขอบคุณครับ
ขอบคุณครับ
27 @R06568
เรียน อ.สันติสุข ครับ
ผมลองสร้าง DB ใหม่ มี Table และ Form อย่างละอัน
ใช้ Function Bahttext จาก Excel
ผล สามารถแสดงผลตัวอักษรได้ครับ
DB เดิมผมคงมีอะไรผิดแน่ๆ แต่ไม่รู้ว่าผิดตรงไหน
ผมลองสร้าง DB ใหม่ มี Table และ Form อย่างละอัน
ใช้ Function Bahttext จาก Excel
ผล สามารถแสดงผลตัวอักษรได้ครับ
DB เดิมผมคงมีอะไรผิดแน่ๆ แต่ไม่รู้ว่าผิดตรงไหน
28 @R06569
ผมลองเอา Function เดิม ใน DB เดิม ส่งออกเข้าไปใน DB ใหม่ เพื่อทดสอบ
ผล ขึ้น #Name?
และพอเอา Function Bahttext - Excel กลับไปใช้ใหม่ กลับไม่ได้อีกครับ ขึ้น #Name?
ผล ขึ้น #Name?
และพอเอา Function Bahttext - Excel กลับไปใช้ใหม่ กลับไม่ได้อีกครับ ขึ้น #Name?
29 @R06570
ขอบคุณครับ ท่านอาจารย์สันติสุข
ผมลองแล้วครับ โดยการลองสร้างฐานข้อมูลใหม่เลยครับ ใส่ฟังก์ชั่นเข้าไป หลังจากนั้นเรียกใช้ได้ครับ
กลับมาที่ฐานข้อมูลเดิม ทดลองลบ โมดูลนั้นแล้วก็อปปี้ลงไปใหม่ คราวนี้ใช้ได้ครับ
งงๆเหมือนกัน คงมีปัญหาตอบก็อปปี้ละมั้งครับ เพราะผมใช้การเขียนโปรแกรมผ่าน เวอร์ชวลแมชชีนเอ็กพีโหมด แต่เวลาใช้เน็ตผมใช้ ที่วินโดวส์เซเว่นครับ
ขอบคุณครับ ท่านอาจารย์สันติสุข
ผมลองแล้วครับ โดยการลองสร้างฐานข้อมูลใหม่เลยครับ ใส่ฟังก์ชั่นเข้าไป หลังจากนั้นเรียกใช้ได้ครับ
กลับมาที่ฐานข้อมูลเดิม ทดลองลบ โมดูลนั้นแล้วก็อปปี้ลงไปใหม่ คราวนี้ใช้ได้ครับ
งงๆเหมือนกัน คงมีปัญหาตอบก็อปปี้ละมั้งครับ เพราะผมใช้การเขียนโปรแกรมผ่าน เวอร์ชวลแมชชีนเอ็กพีโหมด แต่เวลาใช้เน็ตผมใช้ ที่วินโดวส์เซเว่นครับ
30 @R06572
สวัสดีครับ ลองโหลดตามที่ Link ไปศึกษาดูนะครับ
ถ้าไม่ได้ก็เมล์มาปรึกษากับผมได้ครับ kingjun_o@hotmail.com
http://f1.uploadfile.biz/file/?i=ENEVMEIEIMWEDW
ขอให้โชคดีนะครับ
ถ้าไม่ได้ก็เมล์มาปรึกษากับผมได้ครับ kingjun_o@hotmail.com
http://f1.uploadfile.biz/file/?i=ENEVMEIEIMWEDW
ขอให้โชคดีนะครับ
31 @R06573
สามารถทำได้แล้วครับ
พอแก้ไข
เรื่องของมาโคร VBA ถูกปิดการใช้งาน
โดยเมื่อตอนเริ่มต้นเปิดฐานข้อมูลจะขึ้นฟ้องว่า
"คำเตือนเกี่ยวกับความปลอดภัย เนื่อหาบางอย่างในฐานข้อมูลถูกปิดการใช้งาน"
มาโคร VBA ถูกปิดการใช้งาน
กำหนดให้ทำงาน
Function Bahttext ก็ใช้งานได้เลย
แก้ไขปัญหาเรื่อง แบบสอบถามชนิดปรับปรุงข้อมูล ที่สร้างไว้
โปรแกรมจะขึ้นข้อความด้านล่างว่า
"การกระทำหรือเหตุการณ์ถูกบล็อกโดยโหมดปิดการใช้งาน"
ไปด้วยหร้อมกัน
ก็ขอขอบคุณ อ.สันติสุขมากครับ ดึกเลยเมื่อวาน
รวมถึงสมาชิกคนอื่นๆด้วยครับ
ขอบคุณมากครับ :)
พอแก้ไข
เรื่องของมาโคร VBA ถูกปิดการใช้งาน
โดยเมื่อตอนเริ่มต้นเปิดฐานข้อมูลจะขึ้นฟ้องว่า
"คำเตือนเกี่ยวกับความปลอดภัย เนื่อหาบางอย่างในฐานข้อมูลถูกปิดการใช้งาน"
มาโคร VBA ถูกปิดการใช้งาน
กำหนดให้ทำงาน
Function Bahttext ก็ใช้งานได้เลย
แก้ไขปัญหาเรื่อง แบบสอบถามชนิดปรับปรุงข้อมูล ที่สร้างไว้
โปรแกรมจะขึ้นข้อความด้านล่างว่า
"การกระทำหรือเหตุการณ์ถูกบล็อกโดยโหมดปิดการใช้งาน"
ไปด้วยหร้อมกัน
ก็ขอขอบคุณ อ.สันติสุขมากครับ ดึกเลยเมื่อวาน
รวมถึงสมาชิกคนอื่นๆด้วยครับ
ขอบคุณมากครับ :)
32 @R06582
เรื่อง Security ใน Access 2007 มันเปลี่ยนไปจากเวอร์ชั่นเดิม ลองเอาไปอ่านดูนะครับ
Security Considerations and Guidance for Access 2007
http://msdn.microsoft.com/en-us/library/bb421308.aspx
Security Considerations and Guidance for Access 2007
http://msdn.microsoft.com/en-us/library/bb421308.aspx
33 @R06697
ให้ไปอีกอันละกันครับ เอามาจากเว็บเมื่อ 8 ปีที่แล้วเก็บไว้นานเลยเอามาให้ปัดฝุ่น
********ขอบคุณคนที่เขียนเอาไว้ อยากเอ่ยนาม แต่จำไม่ได้แล้ว********
Option Compare Database
Public Function BahtText(InputCurrency As Currency) As String
'-------------------------------------------------------------------------------------------------------------------------
' Function: BahtText
' Purpose: converts a number to a string that spells out the number in Thai
'-------------------------------------------------------------------------------------------------------------------------
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
Function FrmLoaded(TempFrm As Form)
Dim result As Boolean
FrmLoaded = SysCmd(acSysCmdGetObjectState, acForm, TempFrm) And acObjStateOpen <> False
If FrmLoaded(TempFrm) = True Then
result = True
Debug.Print TempFrm.Name
End If
End Function
หมายเหต: สร้างเป็นโมดูลนะครับ แล้วเรียกใช้ฟังชั่น
dim bEncode as String
bEncode = Bahttext(ค่าที่ต้องการให้แปลง)
********ขอบคุณคนที่เขียนเอาไว้ อยากเอ่ยนาม แต่จำไม่ได้แล้ว********
Option Compare Database
Public Function BahtText(InputCurrency As Currency) As String
'-------------------------------------------------------------------------------------------------------------------------
' Function: BahtText
' Purpose: converts a number to a string that spells out the number in Thai
'-------------------------------------------------------------------------------------------------------------------------
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
Function FrmLoaded(TempFrm As Form)
Dim result As Boolean
FrmLoaded = SysCmd(acSysCmdGetObjectState, acForm, TempFrm) And acObjStateOpen <> False
If FrmLoaded(TempFrm) = True Then
result = True
Debug.Print TempFrm.Name
End If
End Function
หมายเหต: สร้างเป็นโมดูลนะครับ แล้วเรียกใช้ฟังชั่น
dim bEncode as String
bEncode = Bahttext(ค่าที่ต้องการให้แปลง)
34 @R06879
น่าจะเป็นของ อ.สุภาพ หรือเปล่าครับ
35 @R07058
ทำไม่ได้ค่ะ
พอเอา function Bahttext ไปใช้ใน Report (ป้ายผนึก) มันฟ้องขึ้นกรอบว่า ใส่ค่าพารามิเตอร์ "ฺBahttext"
ทำให้ 2007 น่ะค่ะ
พึ่งจะหัดทำน่ะค่ะช่วยหน่อยน่ะค่ะ
พอเอา function Bahttext ไปใช้ใน Report (ป้ายผนึก) มันฟ้องขึ้นกรอบว่า ใส่ค่าพารามิเตอร์ "ฺBahttext"
ทำให้ 2007 น่ะค่ะ
พึ่งจะหัดทำน่ะค่ะช่วยหน่อยน่ะค่ะ
36 @R07060
คุณ เด็กใหม่พึ่งหัดเรียน (ชื่อสมมติทำไมยาวจังพิมพย์ยากแฮะ อิอิ)
คุณเอาฟังก์ชั่นนี้ไปวางในโมดูลใหม่หรือเปล่า
หรือเอาไปวางในรายงาน
คุณต้องเอาไปวางในโมดูลเท่านั้นนะครับ ห้ามวางในที่อื่นๆ
วางเสร็จแล้วให้ลองคอมไพล์ดู เผื่อมีอะไรไม่รองรับกัน เพราะดูท่าทางฟังก์ชั่นนี้เขียนไว้นานแล้ว หรือ access2007 ของคุณตั้งค่าอะไรให้ขัดแย้งกันหรือเปล่า อันนี้เราต้องลองตรวจสอบดู การสั่งคอมไพล์ เป็นการตรวจสอบที่ง่ายที่สุดแล้วครับ ถ้ามี error อะไรแล้วแก้ไขไม่ได้ มาโพสต์ถามอีกที
แต่ถ้ากรณีคุณวางฟังก์ชั่นได้ถูกที่แล้ว ได้ทำการตรวจสอบข้างต้นแล้ว ผ่านแล้ว ยังทำงานไม่ได้อีก ก็ต้องดูตามขั้นต่อไปครับ
คุณนำไปใช้ใน "รายงานป้ายผนึก" คำนี้ละเอียดไม่พอครับ ไม่รู้ว่าใช้ตรงไหนยังไง
- เขียนเป็นนิพจน์ในคิวรี่ ของแหล่งข้อมูลรายงาน
- หรือ เขียนเป็นนิพนจ์ใน textbox ในรายงาน
คุณเอาฟังก์ชั่นนี้ไปวางในโมดูลใหม่หรือเปล่า
หรือเอาไปวางในรายงาน
คุณต้องเอาไปวางในโมดูลเท่านั้นนะครับ ห้ามวางในที่อื่นๆ
วางเสร็จแล้วให้ลองคอมไพล์ดู เผื่อมีอะไรไม่รองรับกัน เพราะดูท่าทางฟังก์ชั่นนี้เขียนไว้นานแล้ว หรือ access2007 ของคุณตั้งค่าอะไรให้ขัดแย้งกันหรือเปล่า อันนี้เราต้องลองตรวจสอบดู การสั่งคอมไพล์ เป็นการตรวจสอบที่ง่ายที่สุดแล้วครับ ถ้ามี error อะไรแล้วแก้ไขไม่ได้ มาโพสต์ถามอีกที
แต่ถ้ากรณีคุณวางฟังก์ชั่นได้ถูกที่แล้ว ได้ทำการตรวจสอบข้างต้นแล้ว ผ่านแล้ว ยังทำงานไม่ได้อีก ก็ต้องดูตามขั้นต่อไปครับ
คุณนำไปใช้ใน "รายงานป้ายผนึก" คำนี้ละเอียดไม่พอครับ ไม่รู้ว่าใช้ตรงไหนยังไง
- เขียนเป็นนิพจน์ในคิวรี่ ของแหล่งข้อมูลรายงาน
- หรือ เขียนเป็นนิพนจ์ใน textbox ในรายงาน
37 @R07063
ผมส่งตัวอย่างให้อาจารย์แล้วครับ
โหลดไฟล์ได้ที่
www.gmail. com
user : accboard
pwd : accgmail
subject : bahttext
โหลดไฟล์ได้ที่
www.gmail. com
user : accboard
pwd : accgmail
subject : bahttext
38 @R09088
มีวิธีแก้นะค่ะ อย่าก๊อปโค้ดแล้วเอาไปวางเฉยๆ ถึงจะ คอมไพล์ เรียกใช้ฟังก์ชั่นถูกก็เทอะ มันยัง ขึ้น #Name? ในฟอร์ม หรือ #error ใน Report ก็ตาม แก้ตามวิธีที่บอก ก็ทำหมดทุกอย่างก็ยังเป็นเหมือนเดิม **วิธีแก้สำหรับอิฉันคือ print code ที่ก็อปเค้ามาอะ แล้วไปพิมพ์ใหม่ใน โมดูล เอง เลือก กรุ๊ป ฟังก์ชั่นที่มันเด้งขึเนมาให้เลือกและ ตรงตามรูปแบบ ที่ไปก๊อปเค้ามาอะ แล้วมันก็ใช้ได้ อย่าลืมไปตั้งค่ามาโคร เลือกเปิดใช้มาโคร
39 @R17745
สุดยอดครับ ขอบคุณ คุณสำนึกดี อาจารย์ yeadram และอาจารย์ทุกท่านครับ
Time: 0.3179s
ส่วนการคอมไพล์ ให้ไปที่ Visual Basic Editor แล้วไปที่เมนู Debug - Compile ...