2017-12-18 119 views
0

首先,我对Excel和其他应用程序中使用的宏和vba一无所知。我从互联网复制并运行下面的代码在片材1为:相同的Worksheet_Activate代码,但有不同的范围不工作在工作表2

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 

的代码在表1,但是相同的代码但具有不同的范围,即工作正常。 “a5:a100”对于工作表2不起作用。

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

由于事先 问候, ID

+0

这很难读,请考虑添加代码块。 –

+0

是的。激活事件发生在一张纸被激活时。您无法一次激活多个工作表。代码在事件发生时运行,并且该事件仅限于具有代码的表单。无法在Activate事件中运行代码的表格错过了激活时执行某些操作的机会。 – Variatus

+0

检出工作簿表激活事件。 – SJR

回答

0

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

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状态将取决于每行中最后一个单元格的内容。

相关问题