อย่างแรกแถวใน Range
แถวสุดท้ายจาก ActiveSheet.UsedRange.Rows.Count จะผลเป็น 6 เพราะนับเฉพาะแถวใน Range ที่ใช้งานจริง ๆ (จากตัวอย่าง แถวที่ 1 และ 2 ไม่ได้ใช้)
อย่างที่สอง แถวใน Sheet จะเป็นวิธีในการใช้คำสั่ง Go To Special ซึ่งปกติจะใช้วิธีนี้ในการหาแถวสุดท้าย เพราะจะไล่ทำงานจากแถวที่ 1 หรือแถวที่รู้แล้ว
ถ้าเรียกคำสั่ง Selection.SpecialCells(xlCellTypeLastCell).Row หรือ ActiveCell.SpecialCells(xlCellTypeLastCell).Row จะได้ผลเป็น 8 เหมือนกัน
Dim lastRow As Long lastRow = Selection.SpecialCells(xlCellTypeLastCell).Row For r = 1 To lastRow 'do something Next
อันนี้ลองเขียนขึ้นมาเป็น function ดู โดยอ้างจาก Rows range object จากที่ลองแบบนี้ได้ผลแน่นอนดี แค่ส่ง WorkSheet ที่ต้องการหาใน function ก็จะได้แถวสุดท้ายจริง ๆ มา (ในตัวอย่างแรก จะได้ 8)
'หาบรรทัดสุดท้ายของ worksheet หรือ range ที่สนใจ 'ห้ามส่ง Range แบบ Rows หรือ Columns มาเพราะจะได้ค่าสูงสุด 65536 แทน Public Function FindLastRow(searchObject As Variant) As Long Dim r As Range Select Case TypeName(searchObject) Case "Worksheet": Set r = searchObject.UsedRange.Rows Case "Range": Set r = searchObject.Rows Case Else: Exit Function End Select FindLastRow = r.Rows(r.Count).Row End Function
( ◕ ‿‿ ◕ )
1 ความคิดเห็น:
thank you ka
แสดงความคิดเห็น