กระทู้เก่าบอร์ด อ.Yeadram
25,885 18
URL.หัวข้อ /
URL
ฟังก์ชั่น Barcode (39, 128, EAN-8, EAN-13)
ฟังก์ชั่น Barcode (39, 128, EAN-8, EAN-13)
Barcode39
- เป็น Barcode แบบมาตรฐานธรรมดา ไม่มีการบีบข้อมูลให้แคบลง ทำให้บาร์โค๊ตที่ได้จะมีความยาวมาก
- ลักษณะการแปลงข้อมูลจะเป็นการแปลงแบบตรงๆ โดยใส่เครื่องหมาย * คร่อมที่หัวและท้ายข้อมูลเพียงเท่านั้น เช่น ABC123 = *ABC123*
- อักษรที่รองรับได้แก่: 0-9, A-Z, - + . $ % / SPACE
1. ติดตั้งฟอนต์ชื่อ free3of9.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ Barcode39.zip)
2. ใส่โค๊ดลงใน Module ดังนี้:
'----------------Function Start----------------
Public Function Code39(c39 As String)
Dim Counter As Integer
If Len(c39) > 0 Then
c39 = UCase(c39)
For Counter = 1 To Len(c39)
Select Case Asc(Mid(c39, Counter, 1))
Case 32, 36, 37, 43, 45 To 57, 65 To 90
Case Else
MsgBox "Invalid character in barcode string." & vbCrLf & vbCrLf & "Only use 0-9, A-Z, - + . $ % / and the SPACE character", vbCritical
Code39 = ""
Exit Function
End Select
Next
End If
Code39 = "*" & c39 & "*"
End Function
'-----------------Function End-----------------
3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode39 โดยกำหนดฟอนต์ให้เป็นชื่อ Free 3 of 9 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรม MS Access แล้วเปิดใหม่อีกครั้ง)
4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: =Code39([txtCode])
- หรือ หากใช้เป็นแบบเขียนใน VBA: Text1 = Code39("ABC1234567890")
-----------------------------------------------------------------------------------------------
Barcode128 Auto
- Code128 สามารถเข้ารหัสทำให้ข้อมูลแคบลงกว่า Code39 ซึ่งเป็นแบบไม่เข้ารหัส ได้ประมาณ 30%
- Code128 แบ่งเป็น 3 ประเภทดังนี้:
Code128A - ASCII without lowercase characters
Code128B - ASCII without the initial ASCII special characters
Code128C - Numeric
- ส่วนของ Code128 Auto คือ โค๊ดที่รองรับทั้ง Code128 A และ B และ C (ดังนั้นจึงแนะนำให้ใช้ เพราะมีความยืดหยุ่นสูง)
Code128 Auto - Support Code 128 A/B/C characters. Automatically switch between the different code sets and performs characters optimization
1. ติดตั้งฟอนต์ชื่อ code128.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ Barcode128.zip)
2. ใส่โค๊ดลงใน Module ดังนี้:
'----------------Function Start----------------
Option Explicit
Public Function Code128(SourceString As String)
Dim Counter As Integer
Dim CheckSum As Long
Dim mini As Integer
Dim dummy As Integer
Dim UseTableB As Boolean
Dim Code128_Barcode As String
If Len(SourceString) > 0 Then
For Counter = 1 To Len(SourceString)
Select Case Asc(Mid(SourceString, Counter, 1))
Case 32 To 126, 203
Case Else
MsgBox "Invalid character in barcode string." & vbCrLf & vbCrLf & "Please only use standard ASCII characters", vbCritical
Code128 = ""
Exit Function
End Select
Next
Code128_Barcode = ""
UseTableB = True
Counter = 1
Do While Counter <= Len(SourceString)
If UseTableB Then
mini = IIf(Counter = 1 Or Counter + 3 = Len(SourceString), 4, 6)
GoSub testnum
If mini% < 0 Then 'Use Table C
If Counter = 1 Then
Code128_Barcode = Chr(205)
Else 'Switch to table C
Code128_Barcode = Code128_Barcode & Chr(199)
End If
UseTableB = False
Else
If Counter = 1 Then Code128_Barcode = Chr(204) 'Starting with table B
End If
End If
If Not UseTableB Then
mini% = 2
GoSub testnum
If mini% < 0 Then 'OK for 2 digits, process it
dummy% = Val(Mid(SourceString, Counter, 2))
dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 100)
Code128_Barcode = Code128_Barcode & Chr(dummy%)
Counter = Counter + 2
Else
Code128_Barcode = Code128_Barcode & Chr(200)
UseTableB = True
End If
End If
If UseTableB Then
Code128_Barcode = Code128_Barcode & Mid(SourceString, Counter, 1)
Counter = Counter + 1
End If
Loop
For Counter = 1 To Len(Code128_Barcode)
dummy% = Asc(Mid(Code128_Barcode, Counter, 1))
dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 100)
If Counter = 1 Then CheckSum& = dummy%
CheckSum& = (CheckSum& + (Counter - 1) * dummy%) Mod 103
Next
CheckSum& = IIf(CheckSum& < 95, CheckSum& + 32, CheckSum& + 100)
Code128_Barcode = Code128_Barcode & Chr(CheckSum&) & Chr$(206)
End If
Code128 = Code128_Barcode
Exit Function
testnum:
mini% = mini% - 1
If Counter + mini% <= Len(SourceString) Then
Do While mini% >= 0
If Asc(Mid(SourceString, Counter + mini%, 1)) < 48 Or Asc(Mid(SourceString, Counter + mini%, 1)) > 57 Then Exit Do
mini% = mini% - 1
Loop
End If
Return
End Function
'-----------------Function End-----------------
3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode128 โดยกำหนดฟอนต์ให้เป็นชื่อ Code 128 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรมแล้วเรียกใหม่อีกครั้ง)
4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: (txtCode คือ รหัสที่ต้องการจะแปลงเป็น Barcode128)
=Code128([txtCode])
หรือ หากใช้เป็นแบบเขียนใน VBA:
Text1 = Code128("ABC-1234567890")
Barcode39
- เป็น Barcode แบบมาตรฐานธรรมดา ไม่มีการบีบข้อมูลให้แคบลง ทำให้บาร์โค๊ตที่ได้จะมีความยาวมาก
- ลักษณะการแปลงข้อมูลจะเป็นการแปลงแบบตรงๆ โดยใส่เครื่องหมาย * คร่อมที่หัวและท้ายข้อมูลเพียงเท่านั้น เช่น ABC123 = *ABC123*
- อักษรที่รองรับได้แก่: 0-9, A-Z, - + . $ % / SPACE
1. ติดตั้งฟอนต์ชื่อ free3of9.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ Barcode39.zip)
2. ใส่โค๊ดลงใน Module ดังนี้:
'----------------Function Start----------------
Public Function Code39(c39 As String)
Dim Counter As Integer
If Len(c39) > 0 Then
c39 = UCase(c39)
For Counter = 1 To Len(c39)
Select Case Asc(Mid(c39, Counter, 1))
Case 32, 36, 37, 43, 45 To 57, 65 To 90
Case Else
MsgBox "Invalid character in barcode string." & vbCrLf & vbCrLf & "Only use 0-9, A-Z, - + . $ % / and the SPACE character", vbCritical
Code39 = ""
Exit Function
End Select
Next
End If
Code39 = "*" & c39 & "*"
End Function
'-----------------Function End-----------------
3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode39 โดยกำหนดฟอนต์ให้เป็นชื่อ Free 3 of 9 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรม MS Access แล้วเปิดใหม่อีกครั้ง)
4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: =Code39([txtCode])
- หรือ หากใช้เป็นแบบเขียนใน VBA: Text1 = Code39("ABC1234567890")
-----------------------------------------------------------------------------------------------
Barcode128 Auto
- Code128 สามารถเข้ารหัสทำให้ข้อมูลแคบลงกว่า Code39 ซึ่งเป็นแบบไม่เข้ารหัส ได้ประมาณ 30%
- Code128 แบ่งเป็น 3 ประเภทดังนี้:
Code128A - ASCII without lowercase characters
Code128B - ASCII without the initial ASCII special characters
Code128C - Numeric
- ส่วนของ Code128 Auto คือ โค๊ดที่รองรับทั้ง Code128 A และ B และ C (ดังนั้นจึงแนะนำให้ใช้ เพราะมีความยืดหยุ่นสูง)
Code128 Auto - Support Code 128 A/B/C characters. Automatically switch between the different code sets and performs characters optimization
1. ติดตั้งฟอนต์ชื่อ code128.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ Barcode128.zip)
2. ใส่โค๊ดลงใน Module ดังนี้:
'----------------Function Start----------------
Option Explicit
Public Function Code128(SourceString As String)
Dim Counter As Integer
Dim CheckSum As Long
Dim mini As Integer
Dim dummy As Integer
Dim UseTableB As Boolean
Dim Code128_Barcode As String
If Len(SourceString) > 0 Then
For Counter = 1 To Len(SourceString)
Select Case Asc(Mid(SourceString, Counter, 1))
Case 32 To 126, 203
Case Else
MsgBox "Invalid character in barcode string." & vbCrLf & vbCrLf & "Please only use standard ASCII characters", vbCritical
Code128 = ""
Exit Function
End Select
Next
Code128_Barcode = ""
UseTableB = True
Counter = 1
Do While Counter <= Len(SourceString)
If UseTableB Then
mini = IIf(Counter = 1 Or Counter + 3 = Len(SourceString), 4, 6)
GoSub testnum
If mini% < 0 Then 'Use Table C
If Counter = 1 Then
Code128_Barcode = Chr(205)
Else 'Switch to table C
Code128_Barcode = Code128_Barcode & Chr(199)
End If
UseTableB = False
Else
If Counter = 1 Then Code128_Barcode = Chr(204) 'Starting with table B
End If
End If
If Not UseTableB Then
mini% = 2
GoSub testnum
If mini% < 0 Then 'OK for 2 digits, process it
dummy% = Val(Mid(SourceString, Counter, 2))
dummy% = IIf(dummy% < 95, dummy% + 32, dummy% + 100)
Code128_Barcode = Code128_Barcode & Chr(dummy%)
Counter = Counter + 2
Else
Code128_Barcode = Code128_Barcode & Chr(200)
UseTableB = True
End If
End If
If UseTableB Then
Code128_Barcode = Code128_Barcode & Mid(SourceString, Counter, 1)
Counter = Counter + 1
End If
Loop
For Counter = 1 To Len(Code128_Barcode)
dummy% = Asc(Mid(Code128_Barcode, Counter, 1))
dummy% = IIf(dummy% < 127, dummy% - 32, dummy% - 100)
If Counter = 1 Then CheckSum& = dummy%
CheckSum& = (CheckSum& + (Counter - 1) * dummy%) Mod 103
Next
CheckSum& = IIf(CheckSum& < 95, CheckSum& + 32, CheckSum& + 100)
Code128_Barcode = Code128_Barcode & Chr(CheckSum&) & Chr$(206)
End If
Code128 = Code128_Barcode
Exit Function
testnum:
mini% = mini% - 1
If Counter + mini% <= Len(SourceString) Then
Do While mini% >= 0
If Asc(Mid(SourceString, Counter + mini%, 1)) < 48 Or Asc(Mid(SourceString, Counter + mini%, 1)) > 57 Then Exit Do
mini% = mini% - 1
Loop
End If
Return
End Function
'-----------------Function End-----------------
3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode128 โดยกำหนดฟอนต์ให้เป็นชื่อ Code 128 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรมแล้วเรียกใหม่อีกครั้ง)
4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: (txtCode คือ รหัสที่ต้องการจะแปลงเป็น Barcode128)
=Code128([txtCode])
หรือ หากใช้เป็นแบบเขียนใน VBA:
Text1 = Code128("ABC-1234567890")
18 Reply in this Topic. Dispaly 1 pages and you are on page number 1
2 @R19634
หลักการคิดคำนวณสูตรตัวเลขหลักที่ 13 (EAN-13)
ตัวอย่างการคำนวณ เช่น 885 1124 10450 9
--------------------------------------------------------------
Barcode 8 8 5 1 1 2 4 1 0 4 5 0
Odd/Even Pos? O E O E O E O E O E O E
Weighting 1 3 1 3 1 3 1 3 1 3 1 3
Calculation 8*1 8*3 5*1 1*3 1*1 2*3 4*1 1*3 0*1 4*3 5*1 0*3
Weighted Sum 8 24 5 3 1 6 4 3 0 12 5 0
8 + 24 + 5 + 3 + 1 + 6 + 4 + 3 + 0 + 12 + 5 + 0 = 71
71 mod 10 = 1
10 - 1 = 9
--------------------------------------------------------------
- สำหรับ EAN-8 Check digit ประโยชน์และแนวคิดเหมือนกันกับ EAN-13
- สูตรการคิดต่างกันเพียงอย่างเดียวคือ ใช้หลักคี่คูณ 3 (EAN-13 จะใช้หลักคู่ คูณ 3)
ตัวอย่างการคำนวณ เช่น 5512345 7
--------------------------------------------------------------
Barcode 5 5 1 2 3 4 5
Odd/Even Pos? O E O E O E O
Weighting 3 1 3 1 3 1 3
Calculation 5*3 5*1 1*3 2*1 3*3 4*1 5*3
Weighted Sum 15 5 3 2 9 4 15
15 + 5 + 3 + 2 + 9 + 4 + 15 = 53
53 mod 10 = 3
10 - 3 = 7
--------------------------------------------------------------
หวังว่าคงเป็นประโยชน์บ้างนะครับ เพราะเห็นมานานแล้วว่ามีหลายท่านอยากทำบาร์โค๊ดไว้ใช้เองแบบฟรีๆ แต่เท่าที่ดูยังไม่เคยมีใครตอบแบบละเอียด ผมเลยขอแนะนำให้นะครับ
ตัวอย่างการคำนวณ เช่น 885 1124 10450 9
--------------------------------------------------------------
Barcode 8 8 5 1 1 2 4 1 0 4 5 0
Odd/Even Pos? O E O E O E O E O E O E
Weighting 1 3 1 3 1 3 1 3 1 3 1 3
Calculation 8*1 8*3 5*1 1*3 1*1 2*3 4*1 1*3 0*1 4*3 5*1 0*3
Weighted Sum 8 24 5 3 1 6 4 3 0 12 5 0
8 + 24 + 5 + 3 + 1 + 6 + 4 + 3 + 0 + 12 + 5 + 0 = 71
71 mod 10 = 1
10 - 1 = 9
--------------------------------------------------------------
- สำหรับ EAN-8 Check digit ประโยชน์และแนวคิดเหมือนกันกับ EAN-13
- สูตรการคิดต่างกันเพียงอย่างเดียวคือ ใช้หลักคี่คูณ 3 (EAN-13 จะใช้หลักคู่ คูณ 3)
ตัวอย่างการคำนวณ เช่น 5512345 7
--------------------------------------------------------------
Barcode 5 5 1 2 3 4 5
Odd/Even Pos? O E O E O E O
Weighting 3 1 3 1 3 1 3
Calculation 5*3 5*1 1*3 2*1 3*3 4*1 5*3
Weighted Sum 15 5 3 2 9 4 15
15 + 5 + 3 + 2 + 9 + 4 + 15 = 53
53 mod 10 = 3
10 - 3 = 7
--------------------------------------------------------------
หวังว่าคงเป็นประโยชน์บ้างนะครับ เพราะเห็นมานานแล้วว่ามีหลายท่านอยากทำบาร์โค๊ดไว้ใช้เองแบบฟรีๆ แต่เท่าที่ดูยังไม่เคยมีใครตอบแบบละเอียด ผมเลยขอแนะนำให้นะครับ
3 @R19857
คุณ TTT มีฟังก์ชั่นในการอ่าน QRCode จากรูปภาพไหมครับ พอดีต้องการทำโปรแกรมอ่าน QRCode จากกล้อง Webcam แต่ไม่รู้จะแปลงรูปภาพออกมาเป็นข้อมูลได้อย่างไรครับ
4 @R21256
เรียน สอบถาม
ถ้าเป็น 64 บิทในปัจจุบัน code ข้างบน ต้องแก้อะไรบ้างครับ เพราะ บาร์โค้ด มีภาษาไทยปนอยู่ครับ
ถ้าเป็น 64 บิทในปัจจุบัน code ข้างบน ต้องแก้อะไรบ้างครับ เพราะ บาร์โค้ด มีภาษาไทยปนอยู่ครับ
5 @R23382
คุณTTTครับ เป็นแบบเส้นบาร์โค้ดตอนนี้ทำได้แล้วแต่ผมอยากให้มีText Box อีก1ช่องสำหรับแสดงผลเป็นตัวเลขด้วยได้ไหมครับ เพราะตอนนี้หลังจากที่ได้เส้นบาร์โค้ดมาแล้วผมต้องนำตัวที่ทั้งหมดที่ได้มาใส่ในText Box ที่ต้องการอีกทีหนึ่งครับ อยากให้ทำแบบคลิกครั้งเดียวเป็นอัตโนมัติทั้ง2Text Boxเลย จะได้ไหมครับ
6 @R23391
ไม่เข้าใจคำถามครับ? ตัวเลขบาร์โค๊ตที่แสดงก็มาจากข้อมูลคุณเองนี่ครับ ก็นำมาแสดงได้เลย ส่วน Digi สุดท้าย ก็ได้มาจากการคำนวณตามที่เขียนไป เราก็เขียนฟังชั่นแสดงออกมาได้ครับ
7 @R23403
ถูกต้องครับ ยกตัวอย่างกรณีบาร์โค้ด13หลัก เราคีย์ตัวเลขแค่12หลัก ส่วนหลักที่13 ฟังค์ชั่นจะคำนวนเองครับ แต่ปัญหาอยู่ที่ว่า ในฐานข้อมูลจะมีตัวเลขแค่12ตัวที่เราได้ใส่ไว้แต่แรกครับ ซึ่งตัวเลข12หลักไม่สามารถทำการขายได้ครับ ดังนั้นผมจึงต้องทำTextbox ขึ้นมาอีก1ช่องเพื่่อใส่บาร์โค้ด13หลักครับ
ยกตัวอย่างครับ
Textbox1 ใส่ตัวเลข 885015196111
Textbox2 จะได้เส้นบาร์โค้ดพร้อมตัวเลขคือ 8850151961116
กรณีดังกล่าว Textbox1 ไม่สามารถใช้เป็นฐานข้อมูลบาร์โค้ดได้ดเพราะมีแค่12ตัว ขณะเดียวกัน Textbox2 ก็ไม่สามารถใช้เป็นฐานข้อมูลได้เพราะเป็นรูปภาพครับ
ดังนั้นผมจึงต้องสร้า่งTextbox3 เพื่อใส่รหัสบาร์โค้ดทั่้ง13ตัวไว้ใช้ในการขายในหน้าจอขายสินค้าครับ
ความหมายของผมคือว่า มีวิธีใดที่สามารถทำให้ช่องTextBox3 แสดงตัวเลขครบทั้ง13ตัวเหมือนTextbox2 โดยที่รูปแบบเป็นตัวเลข ไม่ใช่เป็นภาพเส้นบาร์โค้ดครับ เพราะเมื่อหลังจากใส่ตัวเลข12ตัวในช่อง Textbox1แล้วกดEnter ผมต้องมาใส่ตัวเลขทั้ง13ตัวในช่อง Textbox3อีกครับ
ยกตัวอย่างตามรูปครับ
ยกตัวอย่างครับ
Textbox1 ใส่ตัวเลข 885015196111
Textbox2 จะได้เส้นบาร์โค้ดพร้อมตัวเลขคือ 8850151961116
กรณีดังกล่าว Textbox1 ไม่สามารถใช้เป็นฐานข้อมูลบาร์โค้ดได้ดเพราะมีแค่12ตัว ขณะเดียวกัน Textbox2 ก็ไม่สามารถใช้เป็นฐานข้อมูลได้เพราะเป็นรูปภาพครับ
ดังนั้นผมจึงต้องสร้า่งTextbox3 เพื่อใส่รหัสบาร์โค้ดทั่้ง13ตัวไว้ใช้ในการขายในหน้าจอขายสินค้าครับ
ความหมายของผมคือว่า มีวิธีใดที่สามารถทำให้ช่องTextBox3 แสดงตัวเลขครบทั้ง13ตัวเหมือนTextbox2 โดยที่รูปแบบเป็นตัวเลข ไม่ใช่เป็นภาพเส้นบาร์โค้ดครับ เพราะเมื่อหลังจากใส่ตัวเลข12ตัวในช่อง Textbox1แล้วกดEnter ผมต้องมาใส่ตัวเลขทั้ง13ตัวในช่อง Textbox3อีกครับ
ยกตัวอย่างตามรูปครับ
8 @R23404
คุณTTTครับ
จากรูปด้านบนผมทำขั้นตอนอย่างนี้ครับ
1.ใส่รหัสสินค้า12หลักในช่องบาร์โค้ด13(Textbox1) แล้วกด Enter
2.จะมีเส้นบาร์โค้ดเกิดขึ้นในช่อง รหัสบาร์โค้ด(Textbox2) ซึ่งมี13หลักครับ
3.นำตัวเลขที่ได้ทั้ง13หลักไปใส่ในช่องรหัสสินค้า(Textbox3)
ความหมายคือว่า หลังจากที่ผมทำข้อ1เสร็จแล้ว เป็นไปได้หรือไม่ครับ ที่จะให้ช่อง รหัสสินค้า (Textbox3) เกิดตัวเลขทั้ง13หลักขึ้นอัตโนมัติเหมือนช่องรหัสบาร์โค้ด (Textbox2) แต่ต้องเป็นรูปแบบของตัวเลขนะครับ โดยที่ผมไม่ต้องพิมพ์เข้าไปเองครับ
จะขอบพระคุณอย่างสูงเลยครับ
จากรูปด้านบนผมทำขั้นตอนอย่างนี้ครับ
1.ใส่รหัสสินค้า12หลักในช่องบาร์โค้ด13(Textbox1) แล้วกด Enter
2.จะมีเส้นบาร์โค้ดเกิดขึ้นในช่อง รหัสบาร์โค้ด(Textbox2) ซึ่งมี13หลักครับ
3.นำตัวเลขที่ได้ทั้ง13หลักไปใส่ในช่องรหัสสินค้า(Textbox3)
ความหมายคือว่า หลังจากที่ผมทำข้อ1เสร็จแล้ว เป็นไปได้หรือไม่ครับ ที่จะให้ช่อง รหัสสินค้า (Textbox3) เกิดตัวเลขทั้ง13หลักขึ้นอัตโนมัติเหมือนช่องรหัสบาร์โค้ด (Textbox2) แต่ต้องเป็นรูปแบบของตัวเลขนะครับ โดยที่ผมไม่ต้องพิมพ์เข้าไปเองครับ
จะขอบพระคุณอย่างสูงเลยครับ
9 @R23406
ทำได้แล้วครับ อาจจะไม่ตรงตามที่ต้องการ100%แต่ก็ถือว่าไกล้เคียงครับ
1.บังคับให้User ใส่บาร์โค้ดเลขตัวสุดท้ายที่ได้ในช่องDigi
2.ถ้าไม่ใส่เลขในช่องDigi ระบบจะแจ้งเดือนไม่สามารถบันทึกได้ครับ
3.เมื่อใส่บาร์โค้ดตัวสุดท้ายในช่อง Digiแล้ว เลขบาร์โค้ดในช่องรหัสสินค้าจะเป็น13หลักครบตามที่ต้องการครับ
แต่ถึงยังไงผมก็ยังต้องการคำตอบที่ดีกว่าจากคุณ TTT เพื่อปรับใช้อยู่นะครับ
1.บังคับให้User ใส่บาร์โค้ดเลขตัวสุดท้ายที่ได้ในช่องDigi
2.ถ้าไม่ใส่เลขในช่องDigi ระบบจะแจ้งเดือนไม่สามารถบันทึกได้ครับ
3.เมื่อใส่บาร์โค้ดตัวสุดท้ายในช่อง Digiแล้ว เลขบาร์โค้ดในช่องรหัสสินค้าจะเป็น13หลักครบตามที่ต้องการครับ
แต่ถึงยังไงผมก็ยังต้องการคำตอบที่ดีกว่าจากคุณ TTT เพื่อปรับใช้อยู่นะครับ
10 @R23444
จริงๆ แล้วหลักที่ 13 ไม่จำเป็นต้องเก็บนะครับ เราเก็บรหัส 12 หลักที่เราสร้างไว้ก็พอแล้ว ลองดูหลักการณ์ทำ EAN-13 การสร้าง การใช้งาน ในคลิปนี้นะครับ
VDO Barcode EAN-13
แต่หากกรณีต้องเก็บจริงๆ ก็ใช้ฟังก์ชั่นนี้ครับ (ในคลิปมีอธิบายไว้)
Function Digit13(BarCode12 As String)
BarCode12 = Replace(BarCode12, " ", "")
If Len(BarCode12) <> 12 Then MsgBox "จำนวนหลักที่ป้อนไม่ถูกต้อง = " & Len(BarCode12) & " (12 ตัวเท่านั้น)", , "จำนวนตัวเลข": Exit Function
Dim i As Integer, NOdd As Integer, NEven As Integer
For i = 1 To 12
If i Mod 2 = 0 Then
NEven = NEven + CInt(Mid(BarCode12, i, 1))
Else
NOdd = NOdd + CInt(Mid(BarCode12, i, 1))
End If
Next
Digit13 = CInt(Right(10 - ((NOdd + (NEven * 3)) Mod 10), 1))
End Function
- จากนั้นก็ไปที่ Textbox1 > Event > After Update:
Textbox1 = Textbox1 & Digit13(Textbox1)
ประมาณนี้ครับ ปรับใช้ดูครับ
VDO Barcode EAN-13
แต่หากกรณีต้องเก็บจริงๆ ก็ใช้ฟังก์ชั่นนี้ครับ (ในคลิปมีอธิบายไว้)
Function Digit13(BarCode12 As String)
BarCode12 = Replace(BarCode12, " ", "")
If Len(BarCode12) <> 12 Then MsgBox "จำนวนหลักที่ป้อนไม่ถูกต้อง = " & Len(BarCode12) & " (12 ตัวเท่านั้น)", , "จำนวนตัวเลข": Exit Function
Dim i As Integer, NOdd As Integer, NEven As Integer
For i = 1 To 12
If i Mod 2 = 0 Then
NEven = NEven + CInt(Mid(BarCode12, i, 1))
Else
NOdd = NOdd + CInt(Mid(BarCode12, i, 1))
End If
Next
Digit13 = CInt(Right(10 - ((NOdd + (NEven * 3)) Mod 10), 1))
End Function
- จากนั้นก็ไปที่ Textbox1 > Event > After Update:
Textbox1 = Textbox1 & Digit13(Textbox1)
ประมาณนี้ครับ ปรับใช้ดูครับ
11 @R23446
สุดยอดมากครับคุณ TTT แนวทางที่ผมใช้มันคนละเรื่องกันเลยครับ ที่ผ่านมาผมเข้าใจหลักของบาร์โค้ดผิดมาตลอดเลยครับ วันนี้ผมได้ข้อมูลที่แจ่มแจ้งเลยครับ
12 @R23448
เลขบัตรประชาชน 13 หลัก ที่เราใช้ หลักสุดท้ายก็ใช้หลักการณ์นี้เหมือนกันครับ
นอกเรื่องนิด:
ยินดีครับ อยากให้ทุกคนใช้ MS Access พัฒนางานของตัวเองให้ได้ประโยชน์สูงสุด ทำให้เห็นว่าทุกคนสามารถใช้ประโยชน์จากมันได้ง่ายๆ ไม่ยุ่งยาก ไม่ว่าคุณมีของสะสมมากจนอยากเก็บฐานข้อมูล ถึงการทำมาค้าขาย ธุรกิจขนาดกลาง ศึกษาได้ด้วยตัวเอง เพียงแค่มีคนคอยแนะนำบ้าง บางกรณี
ผมยังมีวิธีการทำ QR Code อยู่อีก หลักการณ์คล้ายแบบ EAN-13 แต่ยังไม่มีเวลาทำให้ดู เพราะอยากทำคลิปอีกหลายอย่างในลิสทั้งเรื่อง
- Ribbon Menu ก็ยังไม่ได้ทำ
- การเขียน ER-Diagram จนถึงการทำฐานข้อมูลใน MS Access ก็ยังไม่ได้ทำ งานหินมาก
- QR-Code และ อื่นๆอีกมาก
แต่ยอมรับนะครับว่าการทำคลิปพวกนี้ทำยากมาก เพราะผมไม่มีการวางแผน พูดผิดพูดถูก ข้ามขั้นตอนโน้นนี่นั่น ถ้าเรื่องยาวมากๆ ทำเองยังรู้สึกน่าเบื่อ ง่วงนอนเองเลย ยอมรับว่าเนื้อหาวิชาการแบบนี้ ถ้าไม่สนใจจริงคงไม่มีใครดู (ผมเองยังดูแล้วหลับเลย อันนี้จริงๆไม่ใช่มุก) คราวหน้าคงต้องมานั่งคิดวางสคลิปกันก่อน ทำเสร็จ ตัดต่ออีก ไม่ง่ายเลยครับ
ยังไงก็ฝากติดตาม YouTube กันไปนะครับ อาจได้มีโอกาสทำเนื้อหาที่อยากให้ทุกคนได้ประโยชน์จากมันมากที่สุด เข้าสู่ยุค 4.0 ที่ฝันกัน (คงเป็นจริงซักวัน) พัฒนาตัวเอง พัฒนางาน ชาติก็พัฒนาครับ ใครมีความรู้อะไรก็ช่วยๆกันแบ่งปันกัน ยุคใหม่คงต้องใช้สื่อวีดีโอจะได้ประโยชน์มากกว่า แต่ที่นี่ผมก็ยังแวะมาอ่านและช่วยตอบเท่าที่ผมพอจะรู้อยู่เสมอนะครับ
นอกเรื่องนิด:
ยินดีครับ อยากให้ทุกคนใช้ MS Access พัฒนางานของตัวเองให้ได้ประโยชน์สูงสุด ทำให้เห็นว่าทุกคนสามารถใช้ประโยชน์จากมันได้ง่ายๆ ไม่ยุ่งยาก ไม่ว่าคุณมีของสะสมมากจนอยากเก็บฐานข้อมูล ถึงการทำมาค้าขาย ธุรกิจขนาดกลาง ศึกษาได้ด้วยตัวเอง เพียงแค่มีคนคอยแนะนำบ้าง บางกรณี
ผมยังมีวิธีการทำ QR Code อยู่อีก หลักการณ์คล้ายแบบ EAN-13 แต่ยังไม่มีเวลาทำให้ดู เพราะอยากทำคลิปอีกหลายอย่างในลิสทั้งเรื่อง
- Ribbon Menu ก็ยังไม่ได้ทำ
- การเขียน ER-Diagram จนถึงการทำฐานข้อมูลใน MS Access ก็ยังไม่ได้ทำ งานหินมาก
- QR-Code และ อื่นๆอีกมาก
แต่ยอมรับนะครับว่าการทำคลิปพวกนี้ทำยากมาก เพราะผมไม่มีการวางแผน พูดผิดพูดถูก ข้ามขั้นตอนโน้นนี่นั่น ถ้าเรื่องยาวมากๆ ทำเองยังรู้สึกน่าเบื่อ ง่วงนอนเองเลย ยอมรับว่าเนื้อหาวิชาการแบบนี้ ถ้าไม่สนใจจริงคงไม่มีใครดู (ผมเองยังดูแล้วหลับเลย อันนี้จริงๆไม่ใช่มุก) คราวหน้าคงต้องมานั่งคิดวางสคลิปกันก่อน ทำเสร็จ ตัดต่ออีก ไม่ง่ายเลยครับ
ยังไงก็ฝากติดตาม YouTube กันไปนะครับ อาจได้มีโอกาสทำเนื้อหาที่อยากให้ทุกคนได้ประโยชน์จากมันมากที่สุด เข้าสู่ยุค 4.0 ที่ฝันกัน (คงเป็นจริงซักวัน) พัฒนาตัวเอง พัฒนางาน ชาติก็พัฒนาครับ ใครมีความรู้อะไรก็ช่วยๆกันแบ่งปันกัน ยุคใหม่คงต้องใช้สื่อวีดีโอจะได้ประโยชน์มากกว่า แต่ที่นี่ผมก็ยังแวะมาอ่านและช่วยตอบเท่าที่ผมพอจะรู้อยู่เสมอนะครับ
13 @R23512
รอฟังก์ชั่นของ QR Code ครับ
14 @R23603
ผมประสบปัญหา ไม่ทราบว่าจะแก้ไขอย่างไร copy โดยตรง EAN13
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
ตรง Mid$ ขึ้น compile error cannot file project libary
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
ตรง Mid$ ขึ้น compile error cannot file project libary
15 @R23604
ตามนี้ครับ
16 @R23618
ลองทำตาม กลับมองไม่เห็น barcode เลย แม้ visible is ok ช่วยแนะนำด้วยค่ะ
17 @R23619
ลืมบอก EAN13 ค่ะ
18 @R23657
@ทวีชัย โค๊ดไม่น่าผิดนะครับ ลอง Copy โค๊ดใต้ลิงด์วีดีโอดีกว่าครับ เพราะหากคุณเปิด IE Edge แล้ว copy โค๊ดในเว็บนี้ แล้วไปวางมันจะมีอัขระแปลกๆซ่อนอยู่ทำให้โค๊ด Error ได้ครับ
@Wanida ลองดู VDO ที่ผมแนะนำดูครับ ผมว่ามันน่าจะได้แล้วนะ ไม่ยากเลยนะครับการทำ
https://youtu.be/3KRFAZmrlHk
@Wanida ลองดู VDO ที่ผมแนะนำดูครับ ผมว่ามันน่าจะได้แล้วนะ ไม่ยากเลยนะครับการทำ
https://youtu.be/3KRFAZmrlHk
Time: 0.4746s
- เป็นบาร์โค๊ตที่รองรับเฉพาะตัวเลขเท่านั้น โดยหากเป็น EAN-8 คือจะต้องใส่รหัสจำหนวน 7 หลัก ส่วนหลักที่ 8 ฟังก์ชั่นจะทำการ generate ให้เองเพื่อใช้ในการตรวจสอบ
1. ติดตั้งฟอนต์ชื่อ EAN13.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ EAN-13.zip)
2. ใส่โค๊ดลงใน Module ดังนี้:
'----------------Function Start----------------
Public Function EAN8$(chaine$)
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
EAN8$ = ""
If Len(chaine$) = 7 Then
For i% = 1 To 7
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
i% = 0
Exit For
End If
Next
If i% = 8 Then
For i% = 7 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 6 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
CodeBarre$ = ":" 'Ajout marque de debut / Add start mark
For i% = 1 To 4
CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "*" 'Ajout separateur central / Add middle separator
For i% = 5 To 8
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+" 'Ajout de la marque de fin / Add end mark
EAN8$ = CodeBarre$
End If
End If
End Function
'-----------------Function End-----------------
3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode EAN8 โดยกำหนดฟอนต์ให้เป็นชื่อ Code EAN13 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรมแล้วเรียกใหม่อีกครั้ง)
4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: =EAN8([txtCode])
- หรือ หากใช้เป็นแบบเขียนใน VBA: Text1 = EAN8("1234567")
ผลลัพธ์: 1234567 0
-------------------------------------------------------------------------------------------------
Barcode EAN-13
- เป็นบาร์โค๊ตที่รองรับเฉพาะตัวเลขเท่านั้น โดยหากเป็น EAN13 คือจะต้องใส่รหัสจำหนวน 12 หลัก ส่วนหลักที่ 13 ฟังก์ชั่นจะทำการ generate ให้เองเพื่อใช้ในการตรวจสอบ
1. ติดตั้งฟอนต์ชื่อ EAN13.ttf ลงในส่วนของ MS Windows โดยคลิ๊กขวาที่ตัวไฟล์ฟอนต์ แล้วเลือกหัวข้อ Install (โหลดไฟล์ฟอนต์ที่นี่ EAN-13.zip)
2. ใส่โค๊ดลงใน Module ดังนี้:
'----------------Function Start----------------
Public Function EAN13$(chaine$)
Dim i%, checksum%, first%, CodeBarre$, tableA As Boolean
EAN13$ = ""
If Len(chaine$) = 12 Then
For i% = 1 To 12
If Asc(Mid$(chaine$, i%, 1)) < 48 Or Asc(Mid$(chaine$, i%, 1)) > 57 Then
i% = 0
Exit For
End If
Next
If i% = 13 Then
For i% = 12 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
checksum% = checksum% * 3
For i% = 11 To 1 Step -2
checksum% = checksum% + Val(Mid$(chaine$, i%, 1))
Next
chaine$ = chaine$ & (10 - checksum% Mod 10) Mod 10
CodeBarre$ = Left$(chaine$, 1) & Chr$(65 + Val(Mid$(chaine$, 2, 1)))
first% = Val(Left$(chaine$, 1))
For i% = 3 To 7
tableA = False
Select Case i%
Case 3
Select Case first%
Case 0 To 3
tableA = True
End Select
Case 4
Select Case first%
Case 0, 4, 7, 8
tableA = True
End Select
Case 5
Select Case first%
Case 0, 1, 4, 5, 9
tableA = True
End Select
Case 6
Select Case first%
Case 0, 2, 5, 6, 7
tableA = True
End Select
Case 7
Select Case first%
Case 0, 3, 6, 8, 9
tableA = True
End Select
End Select
If tableA Then
CodeBarre$ = CodeBarre$ & Chr$(65 + Val(Mid$(chaine$, i%, 1)))
Else
CodeBarre$ = CodeBarre$ & Chr$(75 + Val(Mid$(chaine$, i%, 1)))
End If
Next
CodeBarre$ = CodeBarre$ & "*" 'Ajout separateur central / Add middle separator
For i% = 8 To 13
CodeBarre$ = CodeBarre$ & Chr$(97 + Val(Mid$(chaine$, i%, 1)))
Next
CodeBarre$ = CodeBarre$ & "+" 'Ajout de la marque de fin / Add end mark
EAN13$ = CodeBarre$
End If
End If
End Function
'-----------------Function End-----------------
3. บนฟอร์ม หรือ รายงาน ให้สร้าง Textbox ที่ต้องการแสดง Barcode EAN13 โดยกำหนดฟอนต์ให้เป็นชื่อ Code EAN13 (ที่ได้ทำไว้ตามข้อ 1 โดยหากไม่พบชื่อให้ปิดโปรแกรมแล้วเรียกใหม่อีกครั้ง)
4. กรณีใช้งานฟังก์ชั่นโดยการกำหนด Property > Control Source: =EAN13([txtCode])
- หรือ หากใช้เป็นแบบเขียนใน VBA: Text1 = EAN13("123456789012")
ผลลัพธ์: 123456789012 8