Page 1 of 2
การสร้าง Query จาก Validation
Posted: Sun Oct 30, 2011 10:58 pm
by bank9597

อาจารย์ครับ ผมไม่แน่ใจว่าเราจะสามารถสร้างคิวรี่ได้เหมือนกับ Access ไหมครับ เช่น ถ้าเราสร้างค่า Validation ไว้ มี DropDown ให้เราเลือกรายการได้ ถ้าเรามีคิวรี่ เราก็น่าจะทำงานง่ายขึ้น เช่น พิมพ์ ก มันก็จะโชว์รายการที่มี ก นำหน้า อะไรประมาณนี้ครับ
ไม่ทราบว่าเราจะทำแบบนั้นได้ไหมครับ
เพราะใน Access ทำได้ ใช้ SQL เช่น Like เป็นต้นครับ

Re: การสร้าง Query จาก Validation
Posted: Sun Oct 30, 2011 11:16 pm
by snasui

ลองศึกษาจากความเห็นนี้เป็นต้นไปครับ
viewtopic.php?p=11236#p11236
Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 2:04 pm
by bank9597

ผมดูตัวอย่างแล้วครับ ค่อนข้างงงกับตัวงานตัวที่แนบมาให้ ก็เลยปรับมาใช้ยังไม่ได้เลยครับ
Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 2:42 pm
by bank9597
ผมได้แนบชีทมาให้ครับ เป็นตัวอย่างการใช้ Validation โดนในชีท Form เซลล์ A1 จะคีย์ค่าที่เราต้องการไป เช่น คีย์ A มันก็จะแสดงชื่อที่มีตัวอักษร A ขึ้นมา
แต่ในกรณีที่ผมจะทำในลักษณะหลายเซลล์ เริ่มจากเซลล์ A1:A20 ผมจะปรับอย่างไร รบกวนอาจารย์แนะแนวทางได้ไหม
Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 3:18 pm
by snasui

ลองศึกษาจากไฟล์แนบครับ โดย
- มีการให้ชื่อกับช่วงเซลล์เพื่อทำ Validation ในชีท PrintReport ชื่อ ValData
- มีการแสดงข้อมูลตามเงื่อนไขด้วยสูตรอยู่ในชีท Employee Data คอลัมน์ AE:AG
- เขียน Code VBA ที่ชีท PrintReport
Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 3:42 pm
by bank9597

ผมพอใจครับอาจารย์ แต่ว่ารูปแบบงานไม่เหมือนกับงานของผม ทำให้ผมยังมองไม่ออกเลยครับว่าผมจะนำเอาไปปรับใช้อย่างไร
ในกรณีของผมต้องทำใบสั่งซื้อ มีการทำรายการในเซลล์ B17:B36 และทุกเซลล์จะมีค่า Validation โดยเลือกรายการจากชีท Product โดยตรง
ทีนี้คือผมอยากเพิ่มขั้นความสามารถไปอีก โดยให้สามารถคีย์ตัวอักษรตัวแรกของสินค้าที่ต้องการ แล้วระบบจะแสดงชื่อสินค้าที่ตรงกับอักษรที่คียืไป ขึ้นมาอัตโนมัติ
ยังมืดครับ

Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 3:47 pm
by snasui

ไฟล์ที่แนบไปให้นั้นสามารถทำได้ตามที่ต้องการได้ทั้งหมดครับ คราวนี้อยู่ที่การนำไปใช้แล้วละครับ

Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 4:13 pm
by bank9597

ประนามความโง่เขลของตัวเองอีกแล้วครับ
อันที่จริง ไฟล์ที่แนบให้ไปตอนแรก ก็เกือบจะใช้งานได้แล้ว แต่กลับคิดไม่ออก
ขอบคุณมากครับอาจารย์

แต่ก็คิดว่ายังติดปัญหาอยู่ครับ เนื่องจากเซลล์ที่มี Validation จะป้องการคีย์ข้อผิด หมายถึงถ้าชื่อไม่มีในฐานข้อมูล มันก็จะไม่ยอมให้ผ่าน ต้องเลือกจากรายการอย่างเดียว
แต่ทีนี้ ผมทำแบบ AutoValidation ผมจะต้องยกเลิกการป้องกันตรงนี้ โดยการเข้าไปใน Data Validation
untitled.JPG
เมื่อเป็นเช่นนี้ ทำให้มีโอกาสที่จะคีย์ข้อมูลผิดได้ง่าย เพราะถึงแม้ชื่อที่คีย์ไปนั้นจะไม่มีใน Database มันก็ยอมให้คีย์อยู่
ผมลองดูไฟล์ที่อาจารย์แนบมาให้เป็นตัวอย่าง ในชีท PrintReport ช่วง D7:D20 ผมสังเกตได้ว่าจะมีการคีย์ตัวอักษรลงไป เช่น ก จ ช.. ซึ่งระบบยอมให้คีย์ลงไปได้
ถ้าเป็นอย่างนี้ โอกาสที่ผู้ทำรายการ จะอุปโหลกชื่อสินค้าขึ้นมาเอง โดยไม่มีในฐานข้อมูลก็ได้สิน่ะครับ
ถ้าเป็นแบบนี้ เราจะแก้อย่างไรครับ คงต้องลงลึกถึงโค๊ด VBA ใช่ไหมครับ
Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 4:22 pm
by snasui

ปล่อยให้คีย์ไปตามสบายครับ แต่เวลา Save หรือ บันทึก จะมี Code สำหรับตรวจสอบอีกที ถ้าพบว่ามีรายการใดไม่อยู่ในฐานข้อมูลก็มี Message แจ้งและไม่สามารถ Save หรือบันทึกได้ครับ

Re: การสร้าง Query จาก Validation
Posted: Wed Nov 02, 2011 4:27 pm
by bank9597
Re: การสร้าง Query จาก Validation
Posted: Thu Nov 03, 2011 12:18 am
by bank9597

รบกวนอีกครั้งครับอาจารย์
ในกรณีที่เราจะเอาค่า ValData ไปใช้ในชีทอื่น ซึ่งมากกว่า 1 ชีทขึ้นไป เราสามารถเอาโค๊ด ไปใช้ซ้ำได้อีกไหมครับ
เพราะว่าผมมีชีททำใบสั่งซื้อ และชีททำใบสอบราคา และอื่นๆ ที่ต้องการใช้ค่า ValData ร่วมกันครับ
ผมลองทำแล้วไม่ได้ครับ
Re: การสร้าง Query จาก Validation
Posted: Thu Nov 03, 2011 8:53 am
by snasui

Code ใดที่บอกว่าไม่ได้แนบมาด้วยครับ
Code สำหรับ Validation ที่ผมเขียนให้นั้นใช้ Event ในการเปลี่ยนแปลง Worksheet โดยกำหนดให้ดูเฉพาะช่วงข้อมูลใด ๆ ที่เปลี่ยนแปลงเข้ามาช่วย ดังนั้น หากต้องนำไปใช้กับชีทอื่น ๆ ก็ต้อง Copy ไปไว้ในชีทนั้น ๆ ครับ
Re: การสร้าง Query จาก Validation
Posted: Thu Nov 03, 2011 9:16 am
by bank9597

โค๊ดด้านล่างครับ
Code: Select all
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
If Not Intersect(Target, Range("B17:B76")) Is Nothing Then
Worksheets("สินค้า").Range("F1") = Target
Target.Select
If Len(Target) < 10 Then
Application.SendKeys "%{DOWN}"
End If
End If
Application.EnableEvents = True
End Sub
ผมได้เอาใส่โค๊ดนี้ในชีท Quotation ใช้งานได้ครับ แล้วผมก็ Copy โค๊ดด้านบนไปใส่ในชีท PurchaseOrder ทำทุกองค์ประกอบให้เหมือนกับชีท Quotation แล้ว แต่ มันยังใช้การไม่ได้ครับ เราต้องเพิ่มตรงไหนอีกไหมครับ
Re: การสร้าง Query จาก Validation
Posted: Thu Nov 03, 2011 9:35 am
by snasui

ส่งไฟล์ที่เป็นปัญหามาด้วยครับ
Re: การสร้าง Query จาก Validation
Posted: Thu Nov 03, 2011 10:05 am
by bank9597

ยุ่งแล้วครับอาจารย์ กำลังทำชีทตัวอย่างไปให้อาจารย์ดู เสร็จแล้วลองทำสอบดู มันทำได้อย่างที่อาจารย์ได้กล่าวไว้ ผมเลยชักเริ่มงงครับ
คงต้องส่งไฟล์ตัวจริงไปให้ดู (อายชาวบ้านจัง) แล้วล่ะครับ
ผมใส่โค๊ดในชีท Quotation และชีท PurchaseOrder ครับอาจารย์
Re: การสร้าง Query จาก Validation
Posted: Thu Nov 03, 2011 10:31 am
by snasui

ที่ไม่ได้ก็เป็นเรื่องที่ถูกต้องแล้วครับเพราะเซลล์ที่มี Validation ไม่อยู่ในคอลัมน์ B แต่เขียน Code ให้ตรวจสอบในคอลัมน์ B
Code: Select all
If Not Intersect(Target, Range("B17:B76")) Is Nothing Then
Re: การสร้าง Query จาก Validation
Posted: Thu Nov 03, 2011 10:33 am
by bank9597
Re: การสร้าง Query จาก Validation
Posted: Mon Nov 07, 2011 2:44 pm
by bank9597

รบกวนถามเรื่อง AutoValidation อีกครั้งครับ
เนื่องจากว่าการทำ AutoValidation เราจะสามารถทำได้ (สะดวก) ในกรณีที่ข้อมูลมีจำนวน Record ที่แน่นอน หรือมีการเปลี่ยนแปลงน้อย
เช่นในกรณีของ Product,Supplier เราสามารถรู้จำนวน Record ที่ค่อนข้างชัดเจนว่ามีปริมาณเท่าไหร่ ดังนั้นเราจึงสามารถใช้สูตรและเขียนโค๊ดได้ตามวิธีการดังที่อาจารย์กล่าวมาแล้ว
แต่หากว่า เราต้องการทำ AutoValidation ในตารางข้อมูลที่มีจำนวนมากๆ เช่น ในชีท Database จะมีอัตราการเพิ่มขึ้นของ Record ต่อวันมากมายหลาย Record หากเราใช้วิธีการเดิม อาจจะทำให้เราผิดพลาดได้ เนื่องจากเราต้องเข้าไป Copy สูตร ลงมาเรื่อยๆ ตามจำนวนข้อมูลที่เพิ่มขึ้น
ดังนั้นผมจึงอยากจะขอถามอาจารย์ครับว่า เรามีวิธีการอื่นอีกไหมครับ ที่สามารถทำ AutoValidation โดยสะดวกกว่านี้ครับ

Re: การสร้าง Query จาก Validation
Posted: Mon Nov 07, 2011 10:52 pm
by snasui

เราสามารถหาค่ารายการใด ๆ แบบ Unique ด้วย VBA เพื่อนำไปใช้ใน Valiadion โดยไม่พึ่งสูตรก็ย่อมทำได้ ซึ่งไม่จำเป็นต้องคอย Copy สูตรอยู่เรื่อย ๆ หรือ สามารถใช้ Code VBA Copy สูตรลงมาเรื่อย ๆ โดยไม่ต้องคอย Manaul ก็สามารถทำได้เช่นกันครับ
Re: การสร้าง Query จาก Validation
Posted: Mon Nov 07, 2011 10:56 pm
by bank9597

ถ้าทำแบบนั้นได้ รบกวนขอตัวอย่างศึกษาได้ไหมครับ อย่างที่เคยบอกคือคิดเองยังไม่ค่อยได้ อิอิ
