Page 1 of 2

การสร้าง Query จาก Validation

Posted: Sun Oct 30, 2011 10:58 pm
by bank9597
:D อาจารย์ครับ ผมไม่แน่ใจว่าเราจะสามารถสร้างคิวรี่ได้เหมือนกับ Access ไหมครับ เช่น ถ้าเราสร้างค่า Validation ไว้ มี DropDown ให้เราเลือกรายการได้ ถ้าเรามีคิวรี่ เราก็น่าจะทำงานง่ายขึ้น เช่น พิมพ์ ก มันก็จะโชว์รายการที่มี ก นำหน้า อะไรประมาณนี้ครับ


ไม่ทราบว่าเราจะทำแบบนั้นได้ไหมครับ

เพราะใน Access ทำได้ ใช้ SQL เช่น Like เป็นต้นครับ :D

Re: การสร้าง Query จาก Validation

Posted: Sun Oct 30, 2011 11:16 pm
by snasui
:D ลองศึกษาจากความเห็นนี้เป็นต้นไปครับ viewtopic.php?p=11236#p11236

Re: การสร้าง Query จาก Validation

Posted: Wed Nov 02, 2011 2:04 pm
by bank9597
:D ผมดูตัวอย่างแล้วครับ ค่อนข้างงงกับตัวงานตัวที่แนบมาให้ ก็เลยปรับมาใช้ยังไม่ได้เลยครับ

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
:D ลองศึกษาจากไฟล์แนบครับ โดย
  • มีการให้ชื่อกับช่วงเซลล์เพื่อทำ Validation ในชีท PrintReport ชื่อ ValData
  • มีการแสดงข้อมูลตามเงื่อนไขด้วยสูตรอยู่ในชีท Employee Data คอลัมน์ AE:AG
  • เขียน Code VBA ที่ชีท PrintReport

Re: การสร้าง Query จาก Validation

Posted: Wed Nov 02, 2011 3:42 pm
by bank9597
:D ผมพอใจครับอาจารย์ แต่ว่ารูปแบบงานไม่เหมือนกับงานของผม ทำให้ผมยังมองไม่ออกเลยครับว่าผมจะนำเอาไปปรับใช้อย่างไร

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

ยังมืดครับ :roll:

Re: การสร้าง Query จาก Validation

Posted: Wed Nov 02, 2011 3:47 pm
by snasui
:lol: ไฟล์ที่แนบไปให้นั้นสามารถทำได้ตามที่ต้องการได้ทั้งหมดครับ คราวนี้อยู่ที่การนำไปใช้แล้วละครับ :lol:

Re: การสร้าง Query จาก Validation

Posted: Wed Nov 02, 2011 4:13 pm
by bank9597
:lol: ประนามความโง่เขลของตัวเองอีกแล้วครับ :lol:
อันที่จริง ไฟล์ที่แนบให้ไปตอนแรก ก็เกือบจะใช้งานได้แล้ว แต่กลับคิดไม่ออก :D

ขอบคุณมากครับอาจารย์

:| แต่ก็คิดว่ายังติดปัญหาอยู่ครับ เนื่องจากเซลล์ที่มี Validation จะป้องการคีย์ข้อผิด หมายถึงถ้าชื่อไม่มีในฐานข้อมูล มันก็จะไม่ยอมให้ผ่าน ต้องเลือกจากรายการอย่างเดียว

แต่ทีนี้ ผมทำแบบ AutoValidation ผมจะต้องยกเลิกการป้องกันตรงนี้ โดยการเข้าไปใน Data Validation :ard:
untitled.JPG
เมื่อเป็นเช่นนี้ ทำให้มีโอกาสที่จะคีย์ข้อมูลผิดได้ง่าย เพราะถึงแม้ชื่อที่คีย์ไปนั้นจะไม่มีใน Database มันก็ยอมให้คีย์อยู่

ผมลองดูไฟล์ที่อาจารย์แนบมาให้เป็นตัวอย่าง ในชีท PrintReport ช่วง D7:D20 ผมสังเกตได้ว่าจะมีการคีย์ตัวอักษรลงไป เช่น ก จ ช.. ซึ่งระบบยอมให้คีย์ลงไปได้
ถ้าเป็นอย่างนี้ โอกาสที่ผู้ทำรายการ จะอุปโหลกชื่อสินค้าขึ้นมาเอง โดยไม่มีในฐานข้อมูลก็ได้สิน่ะครับ

ถ้าเป็นแบบนี้ เราจะแก้อย่างไรครับ คงต้องลงลึกถึงโค๊ด VBA ใช่ไหมครับ

Re: การสร้าง Query จาก Validation

Posted: Wed Nov 02, 2011 4:22 pm
by snasui
:lol: ปล่อยให้คีย์ไปตามสบายครับ แต่เวลา Save หรือ บันทึก จะมี Code สำหรับตรวจสอบอีกที ถ้าพบว่ามีรายการใดไม่อยู่ในฐานข้อมูลก็มี Message แจ้งและไม่สามารถ Save หรือบันทึกได้ครับ :mrgreen:

Re: การสร้าง Query จาก Validation

Posted: Wed Nov 02, 2011 4:27 pm
by bank9597
:shock: เจองานยากอีกแล้วเหรอครับเนี่ย :|

ตอนที่ถามอาจารย์หัวข้อนี้อยู่ ผมก็กำลังเขียนโค๊ดตรวจสอบการคีย์ข้อมูลไม่ครบ และก็ยังไม่ได้สักที :mrgreen:

อาการหนักแล้วครับ :D :D :D

Re: การสร้าง Query จาก Validation

Posted: Thu Nov 03, 2011 12:18 am
by bank9597
:D รบกวนอีกครั้งครับอาจารย์
ในกรณีที่เราจะเอาค่า ValData ไปใช้ในชีทอื่น ซึ่งมากกว่า 1 ชีทขึ้นไป เราสามารถเอาโค๊ด ไปใช้ซ้ำได้อีกไหมครับ

เพราะว่าผมมีชีททำใบสั่งซื้อ และชีททำใบสอบราคา และอื่นๆ ที่ต้องการใช้ค่า ValData ร่วมกันครับ

ผมลองทำแล้วไม่ได้ครับ

Re: การสร้าง Query จาก Validation

Posted: Thu Nov 03, 2011 8:53 am
by snasui
:D Code ใดที่บอกว่าไม่ได้แนบมาด้วยครับ

Code สำหรับ Validation ที่ผมเขียนให้นั้นใช้ Event ในการเปลี่ยนแปลง Worksheet โดยกำหนดให้ดูเฉพาะช่วงข้อมูลใด ๆ ที่เปลี่ยนแปลงเข้ามาช่วย ดังนั้น หากต้องนำไปใช้กับชีทอื่น ๆ ก็ต้อง Copy ไปไว้ในชีทนั้น ๆ ครับ

Re: การสร้าง Query จาก Validation

Posted: Thu Nov 03, 2011 9:16 am
by bank9597
:D โค๊ดด้านล่างครับ

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
:D ส่งไฟล์ที่เป็นปัญหามาด้วยครับ

Re: การสร้าง Query จาก Validation

Posted: Thu Nov 03, 2011 10:05 am
by bank9597
:D ยุ่งแล้วครับอาจารย์ กำลังทำชีทตัวอย่างไปให้อาจารย์ดู เสร็จแล้วลองทำสอบดู มันทำได้อย่างที่อาจารย์ได้กล่าวไว้ ผมเลยชักเริ่มงงครับ

คงต้องส่งไฟล์ตัวจริงไปให้ดู (อายชาวบ้านจัง) แล้วล่ะครับ

ผมใส่โค๊ดในชีท Quotation และชีท PurchaseOrder ครับอาจารย์

Re: การสร้าง Query จาก Validation

Posted: Thu Nov 03, 2011 10:31 am
by snasui
:D ที่ไม่ได้ก็เป็นเรื่องที่ถูกต้องแล้วครับเพราะเซลล์ที่มี Validation ไม่อยู่ในคอลัมน์ B แต่เขียน Code ให้ตรวจสอบในคอลัมน์ B :ard:

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
:D แก้ไขครับอาจารย์

เกิดจากความผิดพลาดของผมเอง ผมดูแล้ว พลาดตรงที่การระบุเซลล์ครับ ขอโทษอาจารย์ด้วยจริงๆ :D

:mrgreen: :mrgreen: :mrgreen: :mrgreen:

Re: การสร้าง Query จาก Validation

Posted: Mon Nov 07, 2011 2:44 pm
by bank9597
:D รบกวนถามเรื่อง 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
:lol: เราสามารถหาค่ารายการใด ๆ แบบ Unique ด้วย VBA เพื่อนำไปใช้ใน Valiadion โดยไม่พึ่งสูตรก็ย่อมทำได้ ซึ่งไม่จำเป็นต้องคอย Copy สูตรอยู่เรื่อย ๆ หรือ สามารถใช้ Code VBA Copy สูตรลงมาเรื่อย ๆ โดยไม่ต้องคอย Manaul ก็สามารถทำได้เช่นกันครับ

Re: การสร้าง Query จาก Validation

Posted: Mon Nov 07, 2011 10:56 pm
by bank9597
:| ถ้าทำแบบนั้นได้ รบกวนขอตัวอย่างศึกษาได้ไหมครับ อย่างที่เคยบอกคือคิดเองยังไม่ค่อยได้ อิอิ :mrgreen: