Page 2 of 7

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Thu Dec 09, 2010 5:32 pm
by snasui
:D ลองตามไฟล์แนบครับ

ที่ชีท Enterthedata

1. เซลล์ E1 คีย์สูตร

=INDEX(Supplier_ID,MATCH(E2,Company_Name,0))

Enter

2. เซลล์ C4 เป็นการใช้ Vadation จากชื่อ SubGroup โดยกำหนดสูตรให้กับชื่อเป็น

=OFFSET(Products!$B$2,MATCH(Enterthedata!$B4,Products!$A$2:$A$15,0)-1,0,COUNTIF(Products!$A$2:$A$15,Enterthedata!$B4))

3. เซลล์ H4 ดึงข้อมูลขนาดบรรจุมาใช้

=IF(G4<>"",INDEX(INDEX(Products!$D$18:$P$28,0,MATCH(G4,Products!$D$17:$P$17,0)),MATCH(E4,Products!$C$18:$C$28,0)),"")

Enter > Copy ลงด้านล่าง

ที่ชีท Products ช่วงเซลล์ A17:P28 ผมทำตัวอย่างสำหรับการกำหนดขนาดบรรจุเพื่อให้ง่า่ยต่อการใช้สูตรสำหรับดึงค่าบรรจุไปใช้

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Fri Dec 10, 2010 9:22 am
by suka
อาจารย์คะ ขออนุญาตรับไฟล์ตัวอย่างนะคะ

ขอบพระคุณมากค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 2:39 pm
by suka
อาจารย์ค่ะ ขอความช่วยเหลือ

ที่ชีท Enterthedata

1.ใช้สูตร VLOOKU ในการดึงค่า เพราะใช้เป็นแค่ VLOOKU ค่ะ อาจารย์เห็นว่ามีสูตรอื่นที่น่านำมาใช้มากกว่ามั้ยคะ

2.เซลล์ C4 ที่ Drop Down List เลือก SubGroup ถ้าจะให้โชว์รหัสสินและชื่อสินค้า ไม่ทราบว่าสามารถทำได้มั้ยคะ

3.ขอรบกวนอาจารย์ค่ะ 3.1 ที่ปุ่ม Record ถ้าบันทึกแล้วไม่บันทึกซ้ำ หรือ ย้อนกลับเพื่อยกเลิก

3.2 เซลล์ C12 จะขอเพิ่มหมายเหตุบันทึกในชีท Database ได้มั้ยคะ

3.3 ให้ระบบถาม password ได้มั้ยคะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 4:40 pm
by snasui
:D ตอบแต่ละข้อดังนี้นะครับ

1. ถ้าใช้ Vlookup แล้วไม่มีปัญหาใดก็สามารถใช้ได้ไม่จำเป็นต้องเปลี่ยนครับ

2. ถ้าจะให้โชว์รหัสสินค้าและชื่อจะต้องนำทั้งสองค่านั้นมาต่อกันก่อนครับ เช่นอาจจะเปิดอีก 1 คอลัมน์แล้วนำ 2 ค่านั้นมาต่อกันแล้วนำค่านี้ไปใช้ใน Validation

3.1 การไม่ให้บันทึกค่าซ้ำจะต้องบอกให้โปรแกรมทราบว่ามีค่านั้นอยู่แล้วไม่ทราบว่าต้องการใช้ค่าใดในการตรวจสอบครับ

3.2 การเพิ่มหมายเหตุหรือเพิ่มข้อมูลอื่นสามารถทำได้เสมอ ช่วยออกแบบมาด้วยครับว่าหมายเหตุอยู่ในเซลล์ใด

3.3 ให้ระบบถาม Password สามารถทำได้ครับ ไม่ทราบว่าต้องการให้ถามในตอนไหนครับ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 5:23 pm
by suka
3.2 การเพิ่มหมายเหตุหรือเพิ่มข้อมูลอื่นสามารถทำได้เสมอ ช่วยออกแบบมาด้วยครับว่าหมายเหตุอยู่ในเซลล์ใด

หมายถึง ที่เซลล์ C12 ที่ชีท Enterthedata นะค่ะ ถ้าเรามีพิมพ์ข้อใดๆ ในเซลล์ C12 ก็จะบันทึกที่ Database ถ้าเราไม่พิมพ์ ก็ไม่มีการบันทึก

3.3 ให้ระบบถาม Password สามารถทำได้ครับ ไม่ทราบว่าต้องการให้ถามในตอนไหนครับ

หมายถึง ตั้งใส่รหัสให้ไฟล์งานนี้นะค่ะ เหมือนการ Login เวบ snasui ถ้าไม่มีรหัสไม่สามารถเปิดไฟล์งานนี้ได้ค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 5:41 pm
by snasui
:D 1. กรณีให้กรอก Password ตอนเปิดไฟล์ลองตามนี้ครับ

เข้าเมนู Tools > Options > Security > ในช่อง Password to open: กรอก Password ตามต้องการ

2. สำหรับการเพิ่มหมายเหตุและตรวจสอบค่าซ้ำผมปรับ Code ให้แล้ว สำหรับการตรวจสอบค่าซ้ำผมให้ตรวจจาก PO.No ดูไฟล์แนบประกอบครับ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 5:49 pm
by suka
อาจารย์ ตอบไวมากเลยค่ะ

ขออนุญาตรับไฟล์ตัวอย่างนะคะ

ขอบพระคุณมากค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 6:23 pm
by suka
อาจารย์คะ

กดที่ปุ่ม Record ที่ชีท Enterthedata จะขึ้นข้อความ ยังไม่ได้ถูกเซ็นชื่อแบบดิจิทัล

และก็มีการบันทึกในชีท Database ด้วนนะค่ะ ไม่ทราบต้องแก้ที่จุดไหนคะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 6:26 pm
by snasui
:D ลองดูการกำหนด Security ครับ โดยเข้าเมนู Tools > Macro > Security ถ้ากำหนดเป็น Low ปกติจะไม่ถูกถามเกี่ยวกับความปลอดภัยอีกครับ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Tue Dec 14, 2010 6:44 pm
by suka
อาจารย์คะ

แก้ได้แล้วค่ะ สามารถบันทึกในชีท Database เรียบร้อยค่ะ

ขอบพระคุณมากค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Sat Dec 18, 2010 10:44 pm
by suka
อาจารย์คะ ขอรบกวนถามและขอคำแนะนำเพิ่มเติมค่ะ

:lol: ผลการใช้งานดีแต่มีติดขัดนิดหน่อยค่ะ ที่ชีท Enterthedata
1. ถ้าเรากด Record บันทึกข้อมูล และเมื่อคีย์ PO.No.ใหม่แล้ว ที่เซลล์ B4:L10 จะทำยังไงให้ว่างเพื่อรับข้อมูลใหม่คะ
2.การแชร์ไฟล์ ใช้สมุดงานร่วมกัน บางทีต้องการแก้ไขอะไรบางจุดเหมือนจะแก้ไม่ได้
คิดจะยกเลิกการแชร์ไฟล์ชั่วคราวก่อน แต่มีข้อความเตือนเอาสมุดงานออกจากการใช้ร่วมกัน ประวัติการเปลียนแปลงจะถูกลบ
พอมีวิธีป้องกันไฟล์งานถูกลบมั้ยคะ :roll:

ขอบพระคุณมากค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Sat Dec 18, 2010 11:12 pm
by snasui
:D Copy Code นี้แทน Code เดิมครับ หรือแทรกบรรทัดที่ 3 นับจากด้านล่างของ Code ด้านล่างนี้ไว้ใน Code เดิมครับ

การเข้าไปยัง Code เดิมให้ทำดังนี้ครับ

กดแป้น Alt+F8 > เลือก PasteData > คลิก Edit

Code: Select all

Option Explicit

Sub PasteData()
Dim i As Integer
Dim rs As Range
Dim rt As Range
    Application.ScreenUpdating = False
    i = Worksheets("Enterthedata").Range("C15")
    With Worksheets("Template")
        Set rs = .Range(.Range("A2"), .Range("R" & i + 1))
    End With
    Set rt = Worksheets("Database").Range("A65536").End(xlUp).Offset(1, 0)
    If Worksheets("Enterthedata").Range("C16") = True Then
        MsgBox "Please check your data. This transaction already recorded."
        Exit Sub
    End If
    rs.Copy: rt.PasteSpecial xlPasteValues
    MsgBox "Record Complete"
    Application.CutCopyMode = False
    Sheets("Enterthedata").Range("B4:D10, F4:G10").ClearContents
    Application.ScreenUpdating = True
End Sub
:mrgreen:

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Sun Dec 19, 2010 12:24 am
by snasui
:D กรณีที่มีการเปลี่ยนแปลงรูปแบบการกรอกข้อมูลจะต้องส่งไฟล์มาใหม่ทุกครั้งครับ ไม่เช่นนั้นผมจะเข้าใจว่าข้อมูลเหมือนเดิมทุกประการ

ผมปรับสูตรใหม่ในคอลัมน์ C และปรับ VBA Code ให้ใหม่ตามด้านล่าง

Code: Select all

Option Explicit

Sub PasteData()
Dim i As Integer
Dim rs As Range
Dim rt As Range
    Application.ScreenUpdating = False
    i = Worksheets("Enterthedata").Range("C16")
    With Worksheets("Template")
        Set rs = .Range(.Range("A2"), .Range("R" & i + 1))
    End With
    Set rt = Worksheets("Database").Range("A65536").End(xlUp).Offset(1, 0)
    If Worksheets("Enterthedata").Range("C16") = True Then
        MsgBox "Please check your data. This transaction already recorded."
        Exit Sub
    End If
    If Worksheets("Enterthedata").Range("B4") = "" Then
        MsgBox "Your data is empty. Fill your data and click record button again."
        Exit Sub
    End If
    rs.Copy: rt.PasteSpecial xlPasteValues
    MsgBox "Record Complete"
    Application.CutCopyMode = False
    Sheets("Enterthedata").Range("B4:B11,D4:D11, E4:F11").ClearContents
    Application.ScreenUpdating = True
End Sub
Note: เนื่องจากข้อมูลในไฟล์แนบไม่สามารถเปิดเผยได้ ขอลบไฟล์แนบออกไปครับ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Sun Dec 19, 2010 12:53 am
by suka
ขอบพระคุณอาจารย์มากค่ะ

:flw: ขอบคุณในความเสียสละเวลาตอบยามค่มืด เวลาขณะตอบนี้ก็หลังเที่งคืน

ขอบพระคุณมากๆๆ :oops:

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Sun Dec 19, 2010 12:56 am
by suka
ขอบพระคุณอาจารย์มากค่ะ

ขอบคุณในความเสียสละเวลาตอบยามค่ำมืด เวลาขณะตอบนี้ก็หลังเที่ยงคืน

ขอบพระคุณมากๆๆ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Mon Dec 20, 2010 9:59 am
by suka
ขอบคุณนะคะ อาจารย์

:rz: ที่ช่วยแก้ปัญหาให้ทุกปัญหาคลีคลาย ทุกคำถามได้รับคำตอบ สามารถช่วยแก้ปัญหาได้ยอดเยี่ยมค่ะ
ขอแจ้งผลการใช้งาน ใช้ได้ดีค่ะ

ขอบพระคุณอาจารย์มากค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Wed Dec 22, 2010 11:40 am
by suka
อาจารย์คะ ขอรบกวนถามและขอคำแนะนำเพิ่มค่ะ

รหัสสินค้า และ สินค้าเดียวกัน ราคาแต่ละร้านค้าต่างกัน จะทำอย่างไงให้ ชีท Enterthedata ในคอลัมน์ J ( Unit Price )
สามารถใช้สูตรดึงค่า Unit Price ของแต่ละ Supplier ไปใช้ได้ถูกต้องคะ
ไม่ทราบว่าต้องแทรกคอลัมน์ หรือเพิ่มชีทใดบ้างค่ะ

ขอบคุณนะค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Wed Dec 22, 2010 11:45 am
by snasui
:D ส่งตัวอย่างมาให้ด้วยครับ :)

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Wed Dec 22, 2010 12:43 pm
by suka
อาจารย์คะ ส่งตัวอย่างค่ะ

Re: ได้แรงบันดาลใจจาก "เทคนิคการทำ Validation แบบสัมพันธ์กัน

Posted: Wed Dec 22, 2010 2:09 pm
by snasui
:D จากตัวอย่างที่ส่งมา ผมอ่านแล้วเข้าใจว่าต้องการดึงค่า Discount จากชีทตัวอย่างมาแสดงในคอลัมน์ K ของชีท Enterthedata ไม่ใช่ค่า UnitPrice เพราะว่าค่า UnitPrice ไม่ได้แยกราย Suplier ถ้าผมเข้าใจถูกต้องที่ชีท Enterthedata เซลล์ K4 คีย์

=IF(ISBLANK($D4)," ",INDEX(ตัวอย่างค่ะ!$E$2:$K$9,MATCH($D4,ตัวอย่างค่ะ!$B$2:$B$9,0),MATCH($D$2,ตัวอย่างค่ะ!$E$1:$K$1,0)))

จะเป็นการดึงข้อมูลส่วนลดของ เอส แอล (ค่าในเซลล์ D2) มาแสดง หากยังไม่ใช่คำตอบ ช่วยแสดงคำตอบที่ถูกต้องมาให้ด้วยครับ :)