2017-09-03 45 views
-1

我有问题使这个代码工作 - 任何帮助非常感谢!我知道这个问题是关于第一行...我有一个Private Sub Worksheet_Change(ByVal Target As Range)上面这个代码来解决我需要VBA代码的其他元素。VBA代码隐藏和取消隐藏多张纸上的空行

Private Sub HideAndUnhideRowsInOtherWorksheet() 
    For Each c In Worksheets("FlatStage").Range("A7:A32") 
     If c.Value = "" Then 
      c.EntireRow.Hidden = True 
     Else 
      c.EntireRow.Hidden = False 
     End If 
    Next 
    For Each c In Worksheets("Efficiency").Range("A7:A32") 
     If c.Value = "" Then 
      c.EntireRow.Hidden = True 
     Else 
      c.EntireRow.Hidden = False 
     End If 
    Next 
    For Each c In Worksheets("DayRate").Range("A7:A10,A14:A22,A25:A25,A28:A39") 
     If c.Value = "" Then 
      c.EntireRow.Hidden = True 
     Else 
      c.EntireRow.Hidden = False 
     End If 
    Next 
    For Each c In Worksheets("AddServ").Range ("A6:A8,A10:A11,A13:A17") 
     If c.Value = "" Then 
      c.EntireRow.Hidden = True 
     Else 
      c.EntireRow.Hidden = False 
     End If 
    Next 
    For Each c In Worksheets("Enhancement").Range("A6:A7") 
     If c.Value = "" Then 
      c.EntireRow.Hidden = True 
     Else 
      c.EntireRow.Hidden = False 
     End If 
    Next 
End Sub 
+1

是我们应该去猜测什么问题? – jsotola

回答

0

如果从上述Worksheet_Change()调用代码,它应该工作,但如果你从另一个模块调用你的子,因为它宣布为Private(以该特定模块),这将是不可见的

所有你需要做的是改变PrivatePublic
(或移动到一个新的通用模块,并使其Public有)


。另一方面,屏幕可能会被执行
而要解决这个循环在此之前关闭ScreenUpdating闪烁,之后

重新打开它,但你也可以减少代码,以便它会更容易维护:

Option Explicit 

Public Sub HideAndUnhideRowsInOtherWorksheet() 
    Application.ScreenUpdating = False 

    ToggleRows Worksheets("FlatStage").Range("A7:A32") 
    ToggleRows Worksheets("Efficiency").Range("A7:A32") 
    ToggleRows Worksheets("DayRate").Range("A7:A10,A14:A22,A25:A25,A28:A39") 
    ToggleRows Worksheets("AddServ").Range("A6:A8,A10:A11,A13:A17") 
    ToggleRows Worksheets("Enhancement").Range("A6:A7") 

    Application.ScreenUpdating = True 
End Sub 

Private Sub ToggleRows(ByRef colRng As Range) 
    If Not colRng Is Nothing Then 
     Dim c As Range 
     For Each c In colRng 
      c.EntireRow.Hidden = Len(c.Value2) = 0 
     Next 
    End If 
End Sub 

或者更小,更快,如果你可以使用AutoFilter

Private Sub FilterRows(ByRef colRng As Range) 
    If Not colRng Is Nothing Then 
     colRng.Parent.UsedRange.Columns(colRng.Column).AutoFilter 'Filter symbol in top cell 
     colRng.AutoFilter Field:=1, Criteria1:="<>" 
    End If 
End Sub 

此子将取消隐藏所有行中的所有工作表

Public Sub UnhideAllRowsInAllWorksheets() 
    Dim ws As Worksheet 
    For Each ws In Worksheets 
     With ws.UsedRange 
      If ws.AutoFilterMode Then .AutoFilter 'ws.ShowAllData 
      .Rows.EntireRow.Hidden = False 
     End With 
    Next 
End Sub