2013-08-25 2 views
1

워크 시트의 사용 범위 내에서 빈 행을 숨기려면 아래 코드를 작성했습니다. 코드는 완벽하게 작동합니다. 워크 시트의 단추에이 매크로를 지정했습니다. 버튼을 클릭하면 사용 된 범위 내의 빈 행이 숨겨집니다.같은 행을 가진 빈 행 숨기기 및 되감기

질문 : 코드를 수정하여이 동일한 버튼을 클릭하면 그 반대가됩니다. 비어있는 행이 표시되지 않으면 버튼을 클릭하면 비어있는 행이 숨겨집니다. 숨겨진 경우 동일한 버튼을 클릭하면 숨김이 해제됩니까? 하나의 버튼으로 두 절차를 모두 실행하려고합니다.

Sub HideLLRows() 
'This sub un/hides blank rows in EIRP LL 

Application.ScreenUpdating = False 

Dim LastRow As Long 
Set EIRPLL = Sheets("EIRP LL") 

LastRow = EIRPLL.UsedRange.Rows.Count 

For i = 6 To LastRow 
    If EIRPLL.Range("B" & i) = "" Then 
     EIRPLL.Rows(i).Hidden = True 
    End If 
Next 

Application.ScreenUpdating = True 
End Sub 

답변

3

간단한 대답은 당신이 단점이있다 그것을

EIRPLL.Rows(i).Hidden = Not EIRPLL.Rows(i).Hidden 

찾아 각 빈 행의 토글 Hidden 상태로 사용자가 숨겨진 상태를 변경하는 경우 하나 이상의 빈 행 다음이 매크로는 모든 숨김 또는 모든 표시 가능으로 돌아 가지 않습니다.

다른 방법은 발견 된 첫 번째 공백을 기준으로 가시성을 설정하는 것입니다.

여기 코드는 몇 가지 추가적인 최적화와 함께, 리팩토링 것 :

  • Dim모든 당신의 변수
  • 루프 A varaint 배열이 아닌 범위를. 이
  • 한 모든 행의 Hidden 속성을 설정 훨씬 빠르다는

Sub HideLLRows() 
    'This sub un/hides blank rows in EIRP LL 

    Application.ScreenUpdating = False 
    Dim i As Long 
    Dim EIRPLL As Worksheet 
    Dim NewState As VbTriState 
    Dim dat As Variant 
    Dim rws As Range 

    Dim LastRow As Long 
    Set EIRPLL = Sheets("EIRP LL") 

    With EIRPLL.UsedRange 
     LastRow = .Rows.Count - .Row + 1 ' in case used range doesn't start at row 1 
     dat = .Columns(2).Resize(LastRow, 1) 
    End With 

    NewState = vbUseDefault 
    With EIRPLL 
     For i = 6 To LastRow 
      If dat(i, 1) = "" Then 
       If NewState = vbUseDefault Then 
        NewState = Not .Rows(i).Hidden 
       End If 
       If rws Is Nothing Then 
        Set rws = Cells(i, 1) 
       Else 
        Set rws = Union(rws, Cells(i, 1)) 
       End If 
      End If 
     Next 
    End With 
    rws.EntireRow.Hidden = NewState 

    Application.ScreenUpdating = True 
End Sub 
+0

귀하의 코드가 훌륭하게 작동 가서 나는 훨씬 의무입니다. 이 솔루션은 내가 예상했던 것보다 더 복잡하며 많은 새로운 루프를 실행하면서 이러한 새로운 개념, 특히 루프 속도에 대한 요점을 연구해야합니다. 다시 한번 감사드립니다. – jmaz

+0

좋은 크리스. 'SpecialCells'을 사용하는 해결책이 있었지만'xlCellTypeBlanks'는 공백을 초래하는 수식을 인식하지 못한다는 것을 다시 깨달았습니다. –

+0

Doug에게 감사드립니다. 나는 'SpecialCells'에 대해 잊고 있습니다. 내 코드는 공백을 반환하는 수식도 인식하지 못합니다. (그러나 기본값'.Value' 대신'.Formula'를 사용하도록 변경할 수 있습니다.) –