Page 1 of 1
สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Mon Dec 11, 2017 7:06 pm
by naphat456
เนื่องจากตอนนี้ผมทำโปรเจคอยู่ครับ โดยผมนั้นทำเรื่องเกี่ยวกับDatabaseครับ ในตัวDatabaseของผมนั้น ผมต้องการให้มันFilterรายการสินค้าที่จะต้องส่งในอีก 3 วันข้างหน้า หน้าซึ่งตัวDatabaseนั้นมีหน้าตาคร่าวๆประมาณนี้ ย้ำนะครับว่าคร่าวๆ
จะเห็นได้ว่าสินค้าแต่ละตัวมีกำหนดส่งสินค้าตามวันเวลาที่เขียนไว้ จุดประสงค์ของผมคือใช้Macroเป็นตัวช่วยในการfilterให้มันแสดงว่าอีกสามวันข้างหน้าสินค้าตัวไหนจะต้องนำออกไปส่งให้ลูกค้า
ซึ่งผมต้องเขียนโค้ดออกมาในรูปไหนครับ เพราะที่ผมเขียนมาพอรันแล้วมันไม่ขึ้นครับ
Code: Select all
Sub Alert()
Dim i As Integer, dayy As Variant
Dim row As Long, x As Integer
Dim ws As Worksheet
Set ws = Worksheets("EXam")
row = ws.Cells(ws.Rows.Count, "A").End(xlUp).row
x = 2
For i = 2 To row
dayy = DateDiff("d", Date, ws.Range("B" & i).Value)
If dayy = 3 Then
ws.Range("$B$2:$B$300").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(
End If
Next i
End Sub
เนื่องจากผมไม่มีทักษะด้านVBAเลย พอเข้าใจแค่เล็กๆน้อย และโค้ดนี้ผมไม่ได้เขียนขึ้นมาเอง จึงอยากจะขอคำแนะนำหน่อยครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Mon Dec 11, 2017 7:11 pm
by puriwutpokin
naphat456 wrote:เนื่องจากตอนนี้ผมทำโปรเจคอยู่ครับ โดยนี้ผมนั้นทำเรื่องเกี่ยวกับDatabaseครับ โดยในตัวDatabaseของผมนั้น ผมต้องการให้มันFilterรายการสินค้าที่จะต้องส่งในอีก 3 วันข้างหน้า หน้าซึ่งตัวDatabaseนั้นมีหน้าตาคร่าวๆประมาณนี้ ย้ำนะครับว่าคร่าวๆ
555555
จะเห็นได้ว่าสินค้าแต่ละตัวมีกำหนดส่งสินค้าตามวันเวลาที่เขียนไว้ จุดประสงค์ของผมคือใช้Macroเป็นตัวช่วยในการfilterให้มันแสดงว่าอีกสามวันข้างหน้าสินค้าตัวไหนจะต้องนำออกไปส่งให้ลูกค้า งงกันไหมครับ
ซึ่งผมต้องเขียนโค้ดออกมาในรูปไหนครับ เพราะที่ผมเขียนมาพอรันแล้วมันไม่ขึ้นครับ
Code: Select all
Sub Alert()
Dim i As Integer, dayy As Variant
Dim row As Long, x As Integer
Dim ws As Worksheet
Set ws = Worksheets("EXam")
row = ws.Cells(ws.Rows.Count, "A").End(xlUp).row
x = 2
For i = 2 To row
dayy = DateDiff("d", Date, ws.Range("B" & i).Value)
If dayy = 3 Then
ws.Range("$B$2:$B$300").AutoFilter Field:=1, Operator:= _
xlFilterValues, Criteria2:=Array(
End If
Next i
End Sub
เนื่องจากผมไม่มีทักษะด้านVBAเลย พอเข้าใจแค่เล็กๆน้อย และโค้ดนี้ผมไม่ได้เขียนขึ้นมาเอง จึงอยากจะขอคำแนะนำหน่อยครับ
ใช้ภาษา แชทผิด กฏข้อ1 ของบอร์ดครับ แก้ไขด้วยครับ แล้ว ควรจะแนบไฟล์ตัวอย่างมาด้วยครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Mon Dec 11, 2017 7:50 pm
by naphat456
puriwutpokin wrote:
ใช้ภาษา แชทผิด กฏข้อ1 ของบอร์ดครับ แก้ไขด้วยครับ แล้ว ควรจะแนบไฟล์ตัวอย่างมาด้วยครับ
แก้ให้แล้วนะครับ ต้องขออภัยด้วยที่ไม่ได้ศึกษากฎของเว็บให้ดีก่อน ส่วนไฟล์แนบผมแนบไปให้แล้วนะครับ ขอบคุณครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Mon Dec 11, 2017 7:55 pm
by snasui
naphat456 wrote:puriwutpokin wrote:
ใช้ภาษา แชทผิด กฏข้อ1 ของบอร์ดครับ แก้ไขด้วยครับ แล้ว ควรจะแนบไฟล์ตัวอย่างมาด้วยครับ
แก้ให้แล้วนะครับ ต้องขออภัยด้วยที่ไม่ได้ศึกษากฎของเว็บให้ดีก่อน ส่วนไฟล์แนบผมแนบไปให้แล้วนะครับ ขอบคุณครับ
แนบไฟล์ที่มี Macro ที่เขียนเองแล้วมาด้วย จะได้ตอบต่อไปจากนั้นครับ
ไฟล์ที่จะแนบ Macro ได้จะต้องมีนามสกุลเป็น .xlsm, .xlsb เช่นนี้เป็นต้น
ไม่สามารถแนบ Macro กับไฟล์ที่มีนามสกุลเป็น .xlsx ได้ครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Tue Dec 12, 2017 4:45 pm
by naphat456
snasui wrote: แนบไฟล์ที่มี Macro ที่เขียนเองแล้วมาด้วย จะได้ตอบต่อไปจากนั้นครับ
ไฟล์ที่จะแนบ Macro ได้จะต้องมีนามสกุลเป็น .xlsm, .xlsb เช่นนี้เป็นต้น
ไม่สามารถแนบ Macro กับไฟล์ที่มีนามสกุลเป็น .xlsx ได้ครับ
ขออภัยด้วยนะครับ ผมมือใหม่จริงๆ ไม่ทราบเรื่องนี้เลย ตอนนี้ผมแนบไฟล์ใหม่ไปให้แล้วนะครับ รบกวนช่วยตรวจสอบให้หน่อยนะครับ โค้ดออาจจะมีข้อผิดพลาดอยู่เยอะครับ เพราะผมก็ไม่ค่อยรู้เรื่องนี้ อยากรบกวนให้ทุกท่านช่วยให้คำแนะนำด้วยครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Tue Dec 12, 2017 5:17 pm
by puriwutpokin
ปรับเป็นโค้ดนี้ดูครับ
Code: Select all
Sub Alert()
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
Dim LastRow As Long, FilterRange As Range
LastRow = _
Cells.Find(What:="*", After:=Range("b2"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Set FilterRange = Range("b2:b" & LastRow)
FilterRange.AutoFilter Field:=2, Criteria1:=">" & CDbl(Date + 2)
Set FilterRange = Nothing
Application.ScreenUpdating = True
End Sub
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Tue Dec 12, 2017 5:41 pm
by naphat456
puriwutpokin wrote:ปรับเป็นโค้ดนี้ดูครับ
Code: Select all
Sub Alert()
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
Dim LastRow As Long, FilterRange As Range
LastRow = _
Cells.Find(What:="*", After:=Range("b2"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Set FilterRange = Range("b2:b" & LastRow)
FilterRange.AutoFilter Field:=2, Criteria1:=">" & CDbl(Date + 2)
Set FilterRange = Nothing
Application.ScreenUpdating = True
End Sub
ได้แล้วครับ ขอบคุณมากๆเลยนะครับ ไม่งั้นผมก็ไม่รู้ว่าต้องทำยังไง อยากถามอีกอย่างครับ ถ้าอยากศึกษาเกี่ยวกับVBAจะมีแนะนำแหล่งความรู้ได้จากที่ไหนบ้างครับ เพราะว่าVBAน่าสนใจดีครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Tue Dec 12, 2017 5:47 pm
by puriwutpokin
ใน Google หรือที่เว็บนี้ แกะและทดสอบบ่อยๆ ครับ ลองผิดเพื่อที่จะถูกครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Wed Dec 13, 2017 4:00 pm
by naphat456
แล้วถ้าสมมุติผมต้องการย้ายกำหนดวันส่งสินค้าไปไว้คอลั่ม7ผมต้องแก้โค้ดตรงไหนบ้างครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Wed Dec 13, 2017 4:57 pm
by puriwutpokin
naphat456 wrote:แล้วถ้าสมมุติผมต้องการย้ายกำหนดวันส่งสินค้าไปไว้คอลั่ม7ผมต้องแก้โค้ดตรงไหนบ้างครับ
แก้จากคอลัมน์ B เป็น G ครับตามโค้ดนี้ครับ
Code: Select all
Sub Alert()
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
Dim LastRow As Long, FilterRange As Range
LastRow = _
Cells.Find(What:="*", After:=Range("g2"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Set FilterRange = Range("g2:g" & LastRow)
FilterRange.AutoFilter Field:=2, Criteria1:=">" & CDbl(Date + 2)
Set FilterRange = Nothing
Application.ScreenUpdating = True
End Sub
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Fri Jan 12, 2018 5:51 pm
by naphat456
puriwutpokin wrote:naphat456 wrote:แล้วถ้าสมมุติผมต้องการย้ายกำหนดวันส่งสินค้าไปไว้คอลั่ม7ผมต้องแก้โค้ดตรงไหนบ้างครับ
แก้จากคอลัมน์ B เป็น G ครับตามโค้ดนี้ครับ
Code: Select all
Sub Alert()
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
Dim LastRow As Long, FilterRange As Range
LastRow = _
Cells.Find(What:="*", After:=Range("g2"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Set FilterRange = Range("g2:g" & LastRow)
FilterRange.AutoFilter Field:=2, Criteria1:=">" & CDbl(Date + 2)
Set FilterRange = Nothing
Application.ScreenUpdating = True
End Sub
สอบถามนิดนึงครับ จากโค้ดที่ให้มา ทำไมตอนรันแล้วมันติดสินค้าที่มากกว่า 3 วันมาด้วยครับ ผมแค่ต้องการในอีกสามวันข้างหน้าเฉยๆอะครับ ต้องมีการปรับโค้ดอะไรหรือเปล่าครับ
พอรันแล้วเป้นตามภาพเลยครับ ซึ่งในความเป็นจริงแล้วมันควรจะเป็นวันที่ 15/01/2018 เท่านั้นครับ รบกวนพี่ๆช่วยผมหน่อยครับ
Re: สอบถามเรื่องการใช้autofilterของvbaครับ
Posted: Fri Jan 12, 2018 7:05 pm
by puriwutpokin
naphat456 wrote:puriwutpokin wrote:naphat456 wrote:แล้วถ้าสมมุติผมต้องการย้ายกำหนดวันส่งสินค้าไปไว้คอลั่ม7ผมต้องแก้โค้ดตรงไหนบ้างครับ
แก้จากคอลัมน์ B เป็น G ครับตามโค้ดนี้ครับ
Code: Select all
Sub Alert()
Application.ScreenUpdating = False
ActiveSheet.AutoFilterMode = False
Dim LastRow As Long, FilterRange As Range
LastRow = _
Cells.Find(What:="*", After:=Range("g2"), _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).row
Set FilterRange = Range("g2:g" & LastRow)
FilterRange.AutoFilter Field:=2, Criteria1:=">" & CDbl(Date + 2)
Set FilterRange = Nothing
Application.ScreenUpdating = True
End Sub
สอบถามนิดนึงครับ จากโค้ดที่ให้มา ทำไมตอนรันแล้วมันติดสินค้าที่มากกว่า 3 วันมาด้วยครับ ผมแค่ต้องการในอีกสามวันข้างหน้าเฉยๆอะครับ ต้องมีการปรับโค้ดอะไรหรือเปล่าครับ
พอรันแล้วเป้นตามภาพเลยครับ ซึ่งในความเป็นจริงแล้วมันควรจะเป็นวันที่ 15/01/2018 เท่านั้นครับ รบกวนพี่ๆช่วยผมหน่อยครับ
แก้ไขการใช้ภาษาแชทด้วยครับ อะ ควรใช้เป็นครับ และ นิดนีง ควรใช้เป็น นิดหนึ่งครับ เพื่อให้เป็นไปตามกฎของบอร์ดนี้ครับ
ปรับเป็น
Code: Select all
'Other code...
FilterRange.AutoFilter Field:=2, Criteria1:="=" & Date + 3
'Other code...