相同的Worksheet_Activate代码,但不同的范围不适用于工作表2

时间:2017-12-18 09:58:14

标签: excel-vba vba excel

首先,我对Excel和其他应用程序中使用的宏和vba一无所知。我从互联网上复制并在表1中运行以下代码:

Option Explicit
Private Sub Worksheet_Activate()
  Dim r As Range, c As Range
  Set r = Range("a129:a1675")
  Application.ScreenUpdating = False
  For Each c In r
    If Len(c.Text) = 0 Then
    c.EntireRow.Hidden = True
    Else
      c.EntireRow.Hidden = False
    End If
  Next c

  Application.ScreenUpdating = True
End Sub

代码在Sheet 1中运行良好但代码相同但范围不同,即。 “a5:a100”不适用于第2页。

我们是否需要停用表单1的代码?

先谢谢, 问候, ID

1 个答案:

答案 0 :(得分:0)

您可以像这样创建一个子类并将其放在标准代码模块中,例如Module1' (you will have to insert it: Right-click in the Project explorer while selecting the workbook's VBA project, select插入and模块`)。

Option Explicit

Sub HideRows(Rng As Range)

    Dim Ws As Worksheet
    Dim R As Long

    Application.ScreenUpdating = False
        With Rng
            Set Ws = .Worksheet
            For R = 1 To .Rows.Count
                Ws.Rows(.Row).EntireRow.Hidden = Not CBool(Len(.Cells(R)))
            Next R
        End With
    Application.ScreenUpdating = True
End Sub

然后从所有受影响的工作表调用相同的子,每个工作表都有不同的范围作为参数。

Option Explicit

Private Sub Worksheet_Activate()
    HideRows Range("A1:A1675")
End Sub

这个想法是范围应该只有一列。如果您提供多列范围,则该行的Hidden状态将取决于每行中最后一个单元格的内容。