Page 1 of 1

สอบถามเรื่องการใช้autofilterของvbaครับ

Posted: Mon Dec 11, 2017 7:06 pm
by naphat456
เนื่องจากตอนนี้ผมทำโปรเจคอยู่ครับ โดยผมนั้นทำเรื่องเกี่ยวกับDatabaseครับ ในตัวDatabaseของผมนั้น ผมต้องการให้มันFilterรายการสินค้าที่จะต้องส่งในอีก 3 วันข้างหน้า หน้าซึ่งตัวDatabaseนั้นมีหน้าตาคร่าวๆประมาณนี้ ย้ำนะครับว่าคร่าวๆ
Image


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


จะเห็นได้ว่าสินค้าแต่ละตัวมีกำหนดส่งสินค้าตามวันเวลาที่เขียนไว้ จุดประสงค์ของผมคือใช้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 ของบอร์ดครับ แก้ไขด้วยครับ แล้ว ควรจะแนบไฟล์ตัวอย่างมาด้วยครับ
แก้ให้แล้วนะครับ ต้องขออภัยด้วยที่ไม่ได้ศึกษากฎของเว็บให้ดีก่อน ส่วนไฟล์แนบผมแนบไปให้แล้วนะครับ ขอบคุณครับ
:D แนบไฟล์ที่มี Macro ที่เขียนเองแล้วมาด้วย จะได้ตอบต่อไปจากนั้นครับ

ไฟล์ที่จะแนบ Macro ได้จะต้องมีนามสกุลเป็น .xlsm, .xlsb เช่นนี้เป็นต้น ไม่สามารถแนบ Macro กับไฟล์ที่มีนามสกุลเป็น .xlsx ได้ครับ

Re: สอบถามเรื่องการใช้autofilterของvbaครับ

Posted: Tue Dec 12, 2017 4:45 pm
by naphat456
snasui wrote: :D แนบไฟล์ที่มี 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 เท่านั้นครับ รบกวนพี่ๆช่วยผมหน่อยครับ
Image

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 เท่านั้นครับ รบกวนพี่ๆช่วยผมหน่อยครับ
Image
แก้ไขการใช้ภาษาแชทด้วยครับ อะ ควรใช้เป็นครับ และ นิดนีง ควรใช้เป็น นิดหนึ่งครับ เพื่อให้เป็นไปตามกฎของบอร์ดนี้ครับ
ปรับเป็น

Code: Select all

'Other code...
FilterRange.AutoFilter Field:=2, Criteria1:="=" & Date + 3
'Other code...