2014-09-23 30 views
0

我有一個在onchange事件中觸發時可以很好地工作的宏。它只是檢查單元格值,並隱藏或取消隱藏同一活動工作表中其他地方的行。下面是隱藏或取消隱藏行的宏:如果我調用宏作爲改變細胞C56爲「否」,它完美的結果隱藏行excel vba在未觸發時不起作用

Sub ToggleTaskTable() 

MsgBox "Toggling Tasks" 

     If Cells(56, 3).Value = "No" Then 
      Cells(57, 1).EntireRow.Hidden = 
      MsgBox "Hding Rows 106, 148 and 190" 

      ActiveSheet.Rows("106").Hidden = True 
      ActiveSheet.Rows("148").Hidden = True 
      ActiveSheet.Rows("190").Hidden = True 

' try it another way 

      Rows("106").Hidden = True 
      Rows("148").Hidden = True 
      Rows("190").Hidden = True 

     Else 
      Cells(57, 1).EntireRow.Hidden = False 

      ' MsgBox "Showing task Rows 106, 148 and 190" 

      Rows("106").Hidden = False 
      Rows("148").Hidden = False 
      Rows("190").Hidden = False 
     End If 
End Sub 

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$C$56" Then 
     Call ToggleTaskTable 
    End If 
End Sub 

如果我調用宏從另一個宏,與C56設置爲「否」,它不會在所有的工作。

Sub CallAllMacros() 
    Call ToggleTaskTable 
End Sub 

儘管msgbox顯示錶明它隱藏了行,但實際上並沒有隱藏它們。

我完全難住!

+0

我認爲您需要完全限定您的對象並重新編寫代碼。 [你可以從這裏開始如何做到這一點](http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros)。 – L42 2014-09-23 23:23:31

回答

0
Sub ToggleTaskTable() 
    With ActiveSheet 
     .Range("A57,A106,A148,A190").EntireRow.Hidden = (.Cells(56, 3).Value = "No") 
    End With 
End Sub 
+0

謝謝。這比我的新代碼更有說服力,但沒有解決問題。我的代碼顯然工作得很好,我有一些後續的代碼重新取消了行。咄!無論如何非常感謝:) – 2014-09-24 15:43:35