EXCEL TOOLS
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
Excel Add-ins ที่พัฒนาโดยคุณสันติพงศ์ ณสุย (MVP Excel 2010-2020) ด้วยภาษา C# เพื่อแก้ไขปัญหาไฟล์ใหญ่ คำนวณนาน ทำงานช้า จัดการข้อมูลต่าง ๆ ที่ทำงานประจำวันได้อย่างสะดวกรวดเร็ว สนใจคลิกไปดูได้ที่นี่ครับ => Excel Tools
[code]
และปิดด้วย [/code]
ตัวอย่างเช่น [code]dim r as range[/code]
เพื่อให้แตกต่างจากข้อความทั่วไป สะดวกในการอ่านและทดสอบ (คลิกเพื่อดูตัวอย่าง)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
ใช้ภาษา แชทผิด กฏข้อ1 ของบอร์ดครับ แก้ไขด้วยครับ แล้ว ควรจะแนบไฟล์ตัวอย่างมาด้วยครับnaphat456 wrote:เนื่องจากตอนนี้ผมทำโปรเจคอยู่ครับ โดยนี้ผมนั้นทำเรื่องเกี่ยวกับDatabaseครับ โดยในตัวDatabaseของผมนั้น ผมต้องการให้มันFilterรายการสินค้าที่จะต้องส่งในอีก 3 วันข้างหน้า หน้าซึ่งตัวDatabaseนั้นมีหน้าตาคร่าวๆประมาณนี้ ย้ำนะครับว่าคร่าวๆ 555555
จะเห็นได้ว่าสินค้าแต่ละตัวมีกำหนดส่งสินค้าตามวันเวลาที่เขียนไว้ จุดประสงค์ของผมคือใช้Macroเป็นตัวช่วยในการfilterให้มันแสดงว่าอีกสามวันข้างหน้าสินค้าตัวไหนจะต้องนำออกไปส่งให้ลูกค้า งงกันไหมครับ
ซึ่งผมต้องเขียนโค้ดออกมาในรูปไหนครับ เพราะที่ผมเขียนมาพอรันแล้วมันไม่ขึ้นครับเนื่องจากผมไม่มีทักษะด้านVBAเลย พอเข้าใจแค่เล็กๆน้อย และโค้ดนี้ผมไม่ได้เขียนขึ้นมาเอง จึงอยากจะขอคำแนะนำหน่อยครับ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
แก้ให้แล้วนะครับ ต้องขออภัยด้วยที่ไม่ได้ศึกษากฎของเว็บให้ดีก่อน ส่วนไฟล์แนบผมแนบไปให้แล้วนะครับ ขอบคุณครับpuriwutpokin wrote: ใช้ภาษา แชทผิด กฏข้อ1 ของบอร์ดครับ แก้ไขด้วยครับ แล้ว ควรจะแนบไฟล์ตัวอย่างมาด้วยครับ
แนบไฟล์ที่มี Macro ที่เขียนเองแล้วมาด้วย จะได้ตอบต่อไปจากนั้นครับnaphat456 wrote:แก้ให้แล้วนะครับ ต้องขออภัยด้วยที่ไม่ได้ศึกษากฎของเว็บให้ดีก่อน ส่วนไฟล์แนบผมแนบไปให้แล้วนะครับ ขอบคุณครับpuriwutpokin wrote: ใช้ภาษา แชทผิด กฏข้อ1 ของบอร์ดครับ แก้ไขด้วยครับ แล้ว ควรจะแนบไฟล์ตัวอย่างมาด้วยครับ
ขออภัยด้วยนะครับ ผมมือใหม่จริงๆ ไม่ทราบเรื่องนี้เลย ตอนนี้ผมแนบไฟล์ใหม่ไปให้แล้วนะครับ รบกวนช่วยตรวจสอบให้หน่อยนะครับ โค้ดออาจจะมีข้อผิดพลาดอยู่เยอะครับ เพราะผมก็ไม่ค่อยรู้เรื่องนี้ อยากรบกวนให้ทุกท่านช่วยให้คำแนะนำด้วยครับsnasui wrote: แนบไฟล์ที่มี Macro ที่เขียนเองแล้วมาด้วย จะได้ตอบต่อไปจากนั้นครับ
ไฟล์ที่จะแนบ Macro ได้จะต้องมีนามสกุลเป็น .xlsm, .xlsb เช่นนี้เป็นต้น ไม่สามารถแนบ Macro กับไฟล์ที่มีนามสกุลเป็น .xlsx ได้ครับ
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น่าสนใจดีครับ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
แก้จากคอลัมน์ B เป็น G ครับตามโค้ดนี้ครับnaphat456 wrote:แล้วถ้าสมมุติผมต้องการย้ายกำหนดวันส่งสินค้าไปไว้คอลั่ม7ผมต้องแก้โค้ดตรงไหนบ้างครับ
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 วันมาด้วยครับ ผมแค่ต้องการในอีกสามวันข้างหน้าเฉยๆอะครับ ต้องมีการปรับโค้ดอะไรหรือเปล่าครับpuriwutpokin wrote:แก้จากคอลัมน์ B เป็น G ครับตามโค้ดนี้ครับnaphat456 wrote:แล้วถ้าสมมุติผมต้องการย้ายกำหนดวันส่งสินค้าไปไว้คอลั่ม7ผมต้องแก้โค้ดตรงไหนบ้างครับ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
แก้ไขการใช้ภาษาแชทด้วยครับ อะ ควรใช้เป็นครับ และ นิดนีง ควรใช้เป็น นิดหนึ่งครับ เพื่อให้เป็นไปตามกฎของบอร์ดนี้ครับnaphat456 wrote:สอบถามนิดนึงครับ จากโค้ดที่ให้มา ทำไมตอนรันแล้วมันติดสินค้าที่มากกว่า 3 วันมาด้วยครับ ผมแค่ต้องการในอีกสามวันข้างหน้าเฉยๆอะครับ ต้องมีการปรับโค้ดอะไรหรือเปล่าครับpuriwutpokin wrote:แก้จากคอลัมน์ B เป็น G ครับตามโค้ดนี้ครับnaphat456 wrote:แล้วถ้าสมมุติผมต้องการย้ายกำหนดวันส่งสินค้าไปไว้คอลั่ม7ผมต้องแก้โค้ดตรงไหนบ้างครับ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
พอรันแล้วเป้นตามภาพเลยครับ ซึ่งในความเป็นจริงแล้วมันควรจะเป็นวันที่ 15/01/2018 เท่านั้นครับ รบกวนพี่ๆช่วยผมหน่อยครับ
Code: Select all
'Other code...
FilterRange.AutoFilter Field:=2, Criteria1:="=" & Date + 3
'Other code...