กระทู้เก่าบอร์ด อ.Yeadram
        
           5,525   6		  
          
					  
		    URL.หัวข้อ / 
		    URL
        
        แปลงเลขอาราบิกเป็นไทย      
    
      แปลงเลขอาราบิกเป็นไทยอย่างไรครับ เช่น วันเดือนปีเกิดเป็นเลขไทยครับ
ช่วยด้วยครับ
    
  ช่วยด้วยครับ
				6 Reply in this Topic. Dispaly 1  pages and you are on page number 1 
				
        
    2 @R06330    
        
  
      ขอบคุณมากครับคุณ Yeadram  ผมขออนุญาต นำ ฟังก์ชั่นที่คุณให้มา ประยุกต์ดูนะครับ    
    
  
        
    3 @R10568    
        
  
      ขอบพระคุณอย่างสูงคับ  ใช้งานดีมาก ๆ    
    
  
        
    4 @R16682    
        
  
      ในกรณีที่ต้องการแสดงผลตัวเลข หรือพิมพ์ตัวเลขออกทางเครื่องพิมพ์เป็นเลขไทย ผ่านรายงาน หรือฟอร์มใน MS Access ท่านสามารถกำหนดคุณสมบัติของ Control ที่มีชื่อว่า "รูปร่างตัวเลข" หรือถ้าเป็นอังกฤษ "Shap number" ให้ = "national"
เหตุที่ตัวเลขกลายเป็นไทยในกรณีนี้คือ โปรแกรมจะดึงค่าตัวเลขจาก Region And Language ใน Control panel มาเป็นข้อกำหนดการแสดง จึงทำให้ตัวเลขกลายเป็นเลขไทย
สมติต้องการทำให้ตัวเลขใน Textbox เป็นเลขไทย ก็แค่ตั้งคุณสมบัติ "รูปร่างตัวเลข" หรืออีกชื่อคือ "Shap number" เป็นค่า National เท่านั้นเองครับ
    
  เหตุที่ตัวเลขกลายเป็นไทยในกรณีนี้คือ โปรแกรมจะดึงค่าตัวเลขจาก Region And Language ใน Control panel มาเป็นข้อกำหนดการแสดง จึงทำให้ตัวเลขกลายเป็นเลขไทย
สมติต้องการทำให้ตัวเลขใน Textbox เป็นเลขไทย ก็แค่ตั้งคุณสมบัติ "รูปร่างตัวเลข" หรืออีกชื่อคือ "Shap number" เป็นค่า National เท่านั้นเองครับ
        
    5 @R22574    
        
  
      แล้วถ้าต้องการให้เลขไทยมีตัวจุลภาคและจุดทศนิยมอีก 2 ตำแหน่ง ต้องทำยังไงคะ    
    
  
        
    6 @R22577    
        
    
      ถ้าจะใช้ฟังก์ชั่นของผมไปประยุกต์
ให้ปรับเปลี่ยนตัวเลขเป็นรูปแบบที่ต้องการก่อน แล้วค่อยส่งเข้าฟังก์ชั่นครับ
เช่น คุณมีตัวเลข 12345678
ก่อนจะส่งเข้าฟังก์ชั่น ก็ปรับรูปแบบมันให้แบบทีคุณต้องการก่อน
Dim dbYourNum as double
Dim txYourNum as string
dbYourNum = cdbl("12345678") ' มันจะแปลง datatype ของตัวเลขที่เห็นนี้ เป็น double แน่นอน เป็นที่แน่ใจว่ามันจะไม่ประมวลผลผิดพลาด
txYourNum = format(dbYourNume, "#,###.00") ' คำสั่งนี้จะทำให้ข้อมูลของคุณ แปลงกลับมาเป็น datatype แบบ text และเขียนในรูปแบบที่เราต้องการ (ศึกษาเพิ่มเติมจากการใช้ฟังก์ชั่น format() ได้จาก help)
แล้วค่อยนำข้อมูลของคุณส่งเข้าฟังก์ชั่นครับ
txYourNum = ThaiNum(txYourNum)
ถ้ามั่นใจว่า เข้าใจตามลำดับก็สามารถย่อทั้งหมดได้ในบรรทัดเดียว เช่น
txYourNum = ThaiNum(format(cdbl("12345678"), "#,###.00"))
    
    
  ให้ปรับเปลี่ยนตัวเลขเป็นรูปแบบที่ต้องการก่อน แล้วค่อยส่งเข้าฟังก์ชั่นครับ
เช่น คุณมีตัวเลข 12345678
ก่อนจะส่งเข้าฟังก์ชั่น ก็ปรับรูปแบบมันให้แบบทีคุณต้องการก่อน
Dim dbYourNum as double
Dim txYourNum as string
dbYourNum = cdbl("12345678") ' มันจะแปลง datatype ของตัวเลขที่เห็นนี้ เป็น double แน่นอน เป็นที่แน่ใจว่ามันจะไม่ประมวลผลผิดพลาด
txYourNum = format(dbYourNume, "#,###.00") ' คำสั่งนี้จะทำให้ข้อมูลของคุณ แปลงกลับมาเป็น datatype แบบ text และเขียนในรูปแบบที่เราต้องการ (ศึกษาเพิ่มเติมจากการใช้ฟังก์ชั่น format() ได้จาก help)
แล้วค่อยนำข้อมูลของคุณส่งเข้าฟังก์ชั่นครับ
txYourNum = ThaiNum(txYourNum)
ถ้ามั่นใจว่า เข้าใจตามลำดับก็สามารถย่อทั้งหมดได้ในบรรทัดเดียว เช่น
txYourNum = ThaiNum(format(cdbl("12345678"), "#,###.00"))
      Time: 0.0621s
    
      
		
ลองๆ ไล่ รหัส แอสกี ดู รู้แค่ว่า ตัวเลข อารบิค เริ่มจาก 48
ส่วนตัวเลขไทยเริ่มจาก 240 ครับ
ถ้าเป็นงานของผมและยังหาวิธีลัดไม่ได้ล่ะก็ ผมก็จะเขียนฟังก์ชั่นขึ้นมาใช้เอง
เช่น
Public Function ThaiNum(AbNum As String)
If Len(AbNum) < 1 Then
ThaiNum = vbNull
Else
Dim i As Integer
Dim sq As String
sq = ""
For i = 1 To Len(AbNum)
If Asc(Mid(AbNum, i, 1)) >= 48 And Asc(Mid(AbNum, i, 1)) <= 57 Then
sq = sq & Chr(Asc(Mid(AbNum, i, 1)) + 192)
Else
sq = sq & Mid(AbNum, i, 1)
End If
Next
ThaiNum = sq
End If
End Function
ตัวอย่างเวลานำไปใช้ก็เช่น
ใน textbox ที่จะแสดงผลวันเกิด (bthDate)
แทนที่เราจะใส่ control source ว่า bthDate
เราก็จะใส่ =Thainum(cstr(bthDate)) แทน
ลองดูครับ ถ้าหาวิธีลัดยังไม่ได้นะครับ ถ้าหาได้แล้วก็เอามาบอกมาเล่าให้ผมได้รู้ด้วยนะครับ