สวัสดีครับอาจารย์
วันนี้มีเรื่องรบกวนหน่อยครับ หัวข้อกระทู้อาจแปลกหน่อย
เพราะผมไม่ทราบว่าควรตั้งชื่ออย่างไร
มีคำสั่งดังนี้
Dim ri As Range
Dim ry As Range
Dim rx As Range
Dim FileSaveName As String
Application.ScreenUpdating = False
If Sheet29.Range("A2").Value = "" Then
MsgBox "ไม่มีข้อมูลให้ส่งออก", vbOKOnly, "CIM 360"
Exit Sub
End If
Sheet29.Activate
On Error Resume Next
With Workbooks("CIM.xlsm").Worksheets("profit")
Set ri = .Range(.Range("A1"), .Range("H100000") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
If Sheet29.Range("A2").Value <> "" Then
ri.Select
ri.Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
FileSaveName = Application.GetSaveAsFilename(, FileFilter:="Exel Files (*.xlsx),*.xlsx", Title:=" CIM โปรดระบุชื่อไฟล์และเลือกที่ตั้งเพื่อบันทึก")
End If
If FileSaveName = "False" Then
MsgBox "ยกเลิกการส่งออกข้อมูล ", vbOKOnly, "CIM"
Application.DisplayAlerts = False
ActiveWindow.Close
Workbooks("CIM.xlsm").Worksheets("profit").Activate
Application.DisplayAlerts = True
Sheet1.Activate
Exit Sub
Else
ActiveWorkbook.SaveAs Filename:=FileSaveName
MsgBox "ได้บันทึกไฟล์ " & FileSaveName, vbOKOnly, "CIM"
Application.DisplayAlerts = False
ActiveWindow.Close
Workbooks("CIM.xlsm").Worksheets("profit").Activate
Application.DisplayAlerts = True
Sheet1.Activate
End If
ประเด็นคือ
การที่ผมใช้
With Workbooks("CIM.xlsm").Worksheets("profit")
Set ri = .Range(.Range("A1"), .Range("H100000") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ทำให้บางกรณีที่มีบางเซลที่มีค่าว่างในช่วงดังกล่าวทำให้มันนำข้อมูลไปไม่หมดเท่าข้อมูลจริงที่มีอยู่
เช่นแถวสุดท้ายที่บางคอลัมม์เป็นค่าวาง (ข้อมูลไม่ต่อเนื่อง)
ตอนนนี้เลยต้องมาปรับใหม่เป็น
Set ri = Sheet29.Columns("A:H")
ซึ่งก็ทำให้ระบบดึงข้อมูลหนัก ตามที่อาจารย์เคยสอนผมไว้เมื่อนานมาแล้ว
ในกรณีบางครั้งรายงานที่กรองมาอาจพบตามเงื่อนไขแค่ สิบรายการ แต่กลับต้อง Copy ตั้งแต่ A:H
อาจารย์พอจะแนะนำได้ไหมครับว่า
With Workbooks("CIM.xlsm").Worksheets("profit")
Set ri = .Range(.Range("A1"), .Range("H100000") _
.End(xlUp)).SpecialCells(xlCellTypeVisible)
End With
ควรปรับเป็นอย่างไรเพื่อให้ Copy ข้อมูลมาครบแม้จะมีข้อมูลบางช่วงของเซลขาดหายไป
ผมคิดเล่นๆว่า กุญแจการปรับเปลี่ยนน่าจะอยู่ที่ .End(xlUp)) เปน .End(xlDown))
แต่ไม่กล้าทำกลัวพังครับ
ขอคำแนะนำด้วยครับ