Page 2 of 2

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Mon Sep 26, 2011 9:28 am
by yodpao.b
ตอนนี้ผมทำได้แล้วครับแต่มันดูไม่ดีเอาเสียเลยคือมันไม่มีหลักการ
ขั้นตอนการทำดังนี้
-ทำตาม Code Sub ShowEmp() ที่อาจารย์ให้ไว้
-รอบแรกให้ดูข้อแม้ที่ F3 แล้วให้มันกรองข้อมูลจะได้ตารางมาหนึ่งตาราง (ตารางนี้จะมีทุกเดือนของชายคนนี้)
-จากนั้นให้นำตารางที่ได้มาหากรองอีกครั้งโดยข้อแม้ อยู่ที่ E3 (จะได้เฉพาะเดือนที่ต้องการ)
อาจารย์ต้องการทดสอบไหมครับ จะได้มีข้อเสนอแนะให้ผม

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Mon Sep 26, 2011 9:58 am
by snasui
:sg:
yodpao.b wrote:อาจารย์ต้องการทดสอบไหมครับ จะได้มีข้อเสนอแนะให้ผม
ไม่ต้องการทดสอบครับ :tt:

ประเด็นคือคุณ yodpao.b ไม่เข้าใจ Code นี้

Code: Select all

 If r = Worksheets("Report").Range("F3") and r.offset(0,100) = Worksheets("Report").Range("F1000") Then
ลองแปลมาให้หน่อยครับจากที่ถามผมในกระทู้อื่น ๆ ซึ่งผมได้อธิบายไปแล้วว่าแต่ละ Code มีความหมายว่าอย่างไร แล้วลองใช้ความเข้าใจนั้นมาใช้อธิบาย Code นี้ หากเข้าใจ Code นี้ได้ก็สามารถเขียนกรองข้อมูลได้ ไม่ต้องทำทีละเงื่อนไข

จากการที่ผมได้ดูการเขียน Code ที่คุณ yodpao.b แนบมาแล้วก็น่าจะสามารถเข้าใจ Code นี้ได้ไม่ยากครับ

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Mon Sep 26, 2011 12:09 pm
by yodpao.b
อาจารย์ครับรบกวนหน่อยครับผมไม่เข้าใจจริงๆ

เช่น r คืออะไร
offset(0,100)ทำไม่ต้องไป offset นี้
Range("F1000") คืออะไร

จะลองแปลให้อาจารย์ดู
If r = Worksheets("Report").Range("F3") หมายถึง ถ้า r เท่ากับ Range("F3") ใน sheets("Report") ให้ทำตามด้านล่าง

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Mon Sep 26, 2011 4:58 pm
by snasui
อ้างอิงตามด้านล่าง
snasui wrote:
yodpao.b wrote:code นี้เกี่ยวกับเดือนเหรอครับ
ไม่ใช่ครับ
yodpao.b wrote:ลอง run แล้วไม่มีอะไรเกิดขึ้น
ควรจะเป็นเช่นนั้นครับ

ที่เขียนมาให้นั้นเป็นตัวอย่างการปรับเงื่อนไขครับ :aru: ข้างบนก็บอกไว้แล้วครับ ส่วนเงื่อนไขอยู่เซลล์ไหนก็ต้องไปอ้างอิงให้ถูกครับ
ย้ำอีกทีว่าคือตัวอย่าง ซึ่งยังอ้างอิงไม่ตรงกับเซลล์จริง
yodpao.b wrote:อาจารย์ครับรบกวนหน่อยครับผมไม่เข้าใจจริงๆ

เช่น r คืออะไร
offset(0,100)ทำไม่ต้องไป offset นี้
Range("F1000") คืออะไร
r คือตัวแปรหนึ่งครับ และเป็นตัวแปรใน rAll ส่วน rAll คืออะไรดูจากตรงนี้
yodpao.b wrote:

Code: Select all

With Worksheets("ฐานข้อมูลล่วงเวลา")
     Set rAll = .Range("B7", .Range("B" & rl).End(xlUp))
End With
จะเห็นได้ว่า rAll คือช่วงข้อมูลในชีท ฐานข้อมูลล่วงเวลา เซลล์เริ่มต้นคือ B7 และจะสิ้นสุดตรงไหนก็ขึ้นอยู่กับค่าที่ได้จาก .Range("B" & rl).End(xlUp) ซึ่งหมายถึงให้ดูที่เซลล์สุดท้ายของคอลัมน์ B วิ่งไปยังเซลล์ที่มีข้อมูลตัวแรกนับจากด้านล่างขึ้นมา เช่นอาจจะเป็น B20 ความหมายของ .Range("B7", .Range("B" & rl).End(xlUp)) ก็จะได้เป็น B7:B20

และเมื่อเรากำหนดเป็น Set rAll = .Range("B7", .Range("B" & rl).End(xlUp)) ก็แสดงว่า rAll = B7:B20 เช่นนี้เป็นต้น

และจาก Code

Code: Select all

For Each r In rAll
ตัว r ก็คือแต่ละค่าใน B7:B20

และจาก

If r = Worksheets("Report").Range("F3") and r.offset(0,100) = Worksheets("Report").Range("F1000") Then

สมมุติว่า r คือ B7 ก็จะหมายความว่า ถ้า B7 มีค่าเท่ากับ F3 และ ค่าที่ถัดจาก B7 ไป 100 คอลัมน์มีค่าเท่ากับ F1000 แล้ว...

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

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Fri Sep 30, 2011 12:24 pm
by yodpao.b
อาจารย์ครับอย่างให้อาจาร์ยดูให้หนอย แบบว่า
ในคอลัม C ตั้งแต่แถว11-14 ใช้ตัวกรอง และสูตร ทำทุกอย่างเหมือนกัน
แต่ไม่เข้าใจว่าทำไม C11-C14 รูปแบบวันที่เป็นข้อความแต่ถ้าเข้าไปแก้ฐานข้อมูล
ให้เป็น เดือนอื่น รูปแบบของวันที่ก็เป็นปกติ
หลังจากแก้ไขฐานข้อมูลแล้ว ให้รันซำอีกครั้ง จะเห็นว่าวันที่เป็นปกติ
untitled.GIF
ขั้นตอนการRun
1.เปิดไฟล์ไปที่ชีท Report
2.คลิกเลือกฟอร์ม
3.เลือกเดือนกรกฎาคม
4.เลือกชื่อยอดเผ่า
5.คลิก Go Report
จะแสดงผลดังรูปผม

ต่อไปลองแก้วันที่ทำล่วงเวลา แถว m7-m10 ให้เป็นเดือน 8 วันที่เดิม
กับไปทำข้อ2-5อีกครั้ง
ผมได้แนบไฟล์มาให้อาจาร์ยดูด้วย
อาจารย์ช่วยดูให้หน่อยครับ แก้ไขตรงนี้ได้ก็เสร๊จแล้ว
ขอบคุณครับผม

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Fri Sep 30, 2011 10:05 pm
by snasui
:D ลองเพิ่ม Code เข้าไปบังคับ Format ใน Sub ShowEmp ตามด้านล่างครับ

Code: Select all

'Other code
If lng > 0 Then
    With Worksheets("Report")
        Set rt = .Range("C11", .Range("P" & lng - 1 + 11))
        If .Range("C11") <> "" Then 'Check if isblank
             .Range("C11", .Range("C" & rl).End(xlUp).Offset(0, 14)).ClearContents
        End If
        .Range("C11:P11").Copy
        rt.PasteSpecial xlPasteFormats
        rt = Application.Transpose(a)
        For Each r In rt.Resize(, 1)
            r = FormatDateTime(r, vbLongDate)
        Next r
        .Range(.Range("C10").End(xlDown).Offset(1, 0), .Range("P" & rl)).Clear 'Change new start cell
        'ShowEmpOK
    End With
Else
    MsgBox "                     ไม่มีประวัติ { ชื่อนี้ } ในการทำล่วงเวลาของเดือนนี้ อยู่ในฐานข้อมูล                 "
End If
'Other code
ส่วน ShowEmpOK ถ้าต้องการใช้ก็ต้องเพิ่ม Code เช่นเดียวกัน

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Wed Oct 05, 2011 11:50 am
by yodpao.b
เรียนอาจารย์ครับ ทำตามแล้วครับได้ผลแล้วครับแต่สงสัยว่า
ก่อนแก้ไขผมทำใน โนต้บุค ไม่เกิดปัญหาเรืองวันที่ แต่พอมาทำในเครื่องตั้งโต๊ะกับเจอปัญหานี้

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Wed Oct 05, 2011 12:38 pm
by snasui
:shock: ลอง Check Regional and Language ดูว่า Set ไว้เหมือนกันหรือไม่ครับ หากกำหนดไว้เหมือนกัน ตอนนี้ยังเดาไม่ออกว่าเกิดเพราะเหตุใดครับ :tt:

Re: สอบถามการใช้ตัวกรองจากVBA

Posted: Wed Oct 05, 2011 12:47 pm
by yodpao.b
ครับผมเหมือนกันครับ แต่ก็ไม่เป็นไรครับ เพราะใช้ได้แล้ว