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 (23.3 KiB) Viewed 118 times
เมื่อเป็นเช่นนี้ ทำให้มีโอกาสที่จะคีย์ข้อมูลผิดได้ง่าย เพราะถึงแม้ชื่อที่คีย์ไปนั้นจะไม่มีใน 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

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