Page 1 of 1

Code VBA ซ่อนแถวว่างค่ะ

Posted: Fri Jun 01, 2018 7:40 pm
by suka
เรียนอาจารย์และท่านผู้รู้ช่วยปรับโค้ดค่ะ

ที่เซลล์ B2:I10 ต้องการให้โค้ดซ่อนแถวที่ว่าง ให้แสดงเฉพาะแถวที่มีข้อมูลตามจำนวนนับของเซลล์ D11 ค่ะ

ลอง Run Code Error ที่บรรทัดนี้ค่ะ
.Range("B2:I10").EntireRows.Hidden = True

ตัวอย่างที่ต้องการตามไฟล์แนบที่ระบายสีเหลืองค่ะ

Code: Select all

Sub HideUnhide()
        Dim r As Range
        Dim i As Integer
        Application.ScreenUpdating = False
        With ActiveSheet
            .Range("B2:I10").EntireRows.Hidden = True
               i = (.Range("B2") - .Range("B10")) * 1 + 1
            If i < 0 Then
                MsgBox "Please check date."
                Exit Sub
            End If
            Set r = .Range("D11").Resize(1, i)
        End With
        If r.Count = 1 Then
            Exit Sub
        End If
        r.EntireRows.Hidden = False
        Application.ScreenUpdating = True
End Sub

Re: Code VBA ซ่อนแถวว่างค่ะ

Posted: Fri Jun 01, 2018 7:58 pm
by snasui
:D ตัวอย่าง Code ครับ

Code: Select all

Sub HideUnhide()
    Application.ScreenUpdating = False
    With ActiveSheet
        .UsedRange.EntireRow.Hidden = False
        If .Range("D11").Value < 9 Then
            .Range("D11").Offset(-9 + .Range("D11").Value, 0) _
                .Resize(9 - .Range("D11").Value + 1).EntireRow.Hidden = True
        End If
    End With
    Application.ScreenUpdating = True
End Sub

Re: Code VBA ซ่อนแถวว่างค่ะ

Posted: Sat Jun 02, 2018 1:20 pm
by suka
snasui wrote: Fri Jun 01, 2018 7:58 pm :D ตัวอย่าง Code ครับ

Code: Select all

Sub HideUnhide()
    Application.ScreenUpdating = False
    With ActiveSheet
        .UsedRange.EntireRow.Hidden = False
        If .Range("D11").Value < 9 Then
            .Range("D11").Offset(-9 + .Range("D11").Value, 0) _
                .Resize(9 - .Range("D11").Value + 1).EntireRow.Hidden = True
        End If
    End With
    Application.ScreenUpdating = True
End Sub

:thup: ขอบคุณค่ะอาจารย์ โค้ดใช้ได้ตรงตามต้องการเลยค่ะ

ขอรบกวนอาจารย์อีกค่ะ
ต้องการปรับโค้ดข้างล่างให้เหลือเพียงปุ่มเดียวค่ะ

ความต้องการปรับใช้เมื่อคลิกปุ่มให้ซ่อนบรรทัดว่าง และ ถ้าคลิกอีกครั้งให้ยกเลิกบรรทัดที่ถูกซ่อนค่ะ

ยังติดปัญหาที่ MainCode เมื่อคลิกซ่อนแล้ว คลิกอีกครั้งยังไม่สามารถยกเลิกการซ่อนได้ค่ะ

โค้ดด้านล่างควรปรับอย่างไรคะ

Code: Select all

Sub MainCode()
    With Sheets("Sheet2")
        If .UsedRange.EntireRow.Hidden = True Then
            Call Macro1
        Else
            Call HideUnhide
        End If
    End With
End Sub
ต้องการใช้รวมกับ Macro1 ค่ะ

Code: Select all

Sub HideUnhide()
    Application.ScreenUpdating = False
    With ActiveSheet
        .UsedRange.EntireRow.Hidden = False
        If .Range("D11").Value < 9 Then
            .Range("D11").Offset(-9 + .Range("D11").Value, 0) _
                .Resize(9 - .Range("D11").Value).EntireRow.Hidden = True
        End If
    End With
    Application.ScreenUpdating = True
End Sub
ได้จากรัน Macro ค่ะ

Code: Select all

Sub Macro1()
    Rows("1:11").Select
    Selection.EntireRow.Hidden = False
    ActiveWorkbook.Save
End Sub

Re: Code VBA ซ่อนแถวว่างค่ะ

Posted: Sat Jun 02, 2018 4:26 pm
by DhitiBank
ถ้ามีการซ่อน แถวที่ 10 มักจะถูกซ่อนแน่ๆ อยู่แล้วใช่ไหมครับ ถ้าอย่างนั้นลองปรับเป็น
(เอาโค้ดเปิดและปิดการอัพเดทหน้าจอจากโปรซีเยอร์ HideUnhide มาไว้ที่ MainCode)

Code: Select all

Sub MainCode()
    Application.ScreenUpdating = False
    With Sheets("Sheet2")
        If .Rows(10).Hidden = True Then
            Call Macro1
        Else
            Call HideUnhide
        End If
    End With
    Application.ScreenUpdating = True
End Sub

Code: Select all

Sub Macro1()
    Rows("1:11").EntireRow.Hidden = False
    ActiveWorkbook.Save
End Sub

Re: Code VBA ซ่อนแถวว่างค่ะ

Posted: Sat Jun 02, 2018 5:14 pm
by suka
:thup: ขอบคุณมากค่ะคุณ DhitiBank ได้ตรงตามที่ต้องการแล้วค่ะ