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
yodpao.b wrote:อาจารย์ต้องการทดสอบไหมครับ จะได้มีข้อเสนอแนะให้ผม
ไม่ต้องการทดสอบครับ
ประเด็นคือคุณ 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 แล้วไม่มีอะไรเกิดขึ้น
ควรจะเป็นเช่นนั้นครับ
ที่เขียนมาให้นั้นเป็น
ตัวอย่างการปรับเงื่อนไขครับ

ข้างบนก็บอกไว้แล้วครับ ส่วนเงื่อนไขอยู่เซลล์ไหนก็ต้องไปอ้างอิงให้ถูกครับ
ย้ำอีกทีว่าคือตัวอย่าง ซึ่งยังอ้างอิงไม่ตรงกับเซลล์จริง
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
ตัว 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

ลอง
เพิ่ม 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

ลอง Check Regional and Language ดูว่า Set ไว้เหมือนกันหรือไม่ครับ หากกำหนดไว้เหมือนกัน ตอนนี้ยังเดาไม่ออกว่าเกิดเพราะเหตุใดครับ

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