การตรวจสอบเซลที่มีค่า
Posted: Tue May 27, 2014 9:31 pm
สวัสดีครับอาจารย์
วันนี้มีเรื่องรบกวนหน่อยครับ หัวข้อกระทู้อาจแปลกหน่อย
เพราะผมไม่ทราบว่าควรตั้งชื่ออย่างไร
มีคำสั่งดังนี้
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))
แต่ไม่กล้าทำกลัวพังครับ
ขอคำแนะนำด้วยครับ
วันนี้มีเรื่องรบกวนหน่อยครับ หัวข้อกระทู้อาจแปลกหน่อย
เพราะผมไม่ทราบว่าควรตั้งชื่ออย่างไร
มีคำสั่งดังนี้
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))
แต่ไม่กล้าทำกลัวพังครับ
ขอคำแนะนำด้วยครับ