2017-12-18 120 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狀態將取決於每行中最後一個單元格的內容。

相關問題