VBA – 基于另一行的隐藏/未隐藏状态来隐藏/取消隐藏行

我试图写一些VBA代码,将隐藏整行,如果另一个特定的行被隐藏。 该macros还根据特定列中的值隐藏了一系列行。 这方面工作正常 – 我有可靠的代码。 我无法得到我描述的第一个function。 应该很容易做,只是不知道语法。 这个子程序应该在打开工作簿时执行。

Private Sub Workbook_Open() Application.ScreenUpdating = False Dim targ As Range Dim msg As Range targ = "DETAILS!B6" msg = "DETAILS!B42" msg.EntireRow.Hidden = True With Range("DETAILS!B6:B40") .EntireRow.Hidden = False For Each cell In Range("DETAILS!B6:B40") Select Case cell.Value Case Is = 0 cell.EntireRow.Hidden = True End Select Next cell End With If targ.EntireRow.Hidden = True Then msg.EntireRow.Hidden = False End If Application.ScreenUpdating = True End Sub 

虽然您可以调用范围对象,如下所示: Range("DETAILS!B6:B40")

在vba中,最好接受这样的调用: Sheets("DETAILS").Range("B6:B40")

我修复了更多的语法错误:

 Private Sub Workbook_Open() Application.ScreenUpdating = False Dim targ As Range Dim msg As Range Set targ = Sheets("DETAILS").Range("B6") Set msg = Sheets("DETAILS").Range("B42") msg.EntireRow.Hidden = True With Sheets("DETAILS").Range("B6:B40") .EntireRow.Hidden = False End With For Each cell In Sheets("DETAILS").Range("B6:B40") Select Case cell.Value Case 0 cell.EntireRow.Hidden = True End Select Next cell If targ.EntireRow.Hidden = True Then msg.EntireRow.Hidden = False End If Application.ScreenUpdating = True End Sub 

你需要像下面那样设置variables

 Private Sub Workbook_Open() Application.ScreenUpdating = False Dim targ As Range Dim msg As Range Set targ = "DETAILS!B6" Set msg = "DETAILS!B42" msg.EntireRow.Hidden = True With Range("DETAILS!B6:B40") .EntireRow.Hidden = False For Each cell In Range("DETAILS!B6:B40") Select Case cell.Value Case Is = 0 cell.EntireRow.Hidden = True End Select Next cell End With If targ.EntireRow.Hidden = True Then msg.EntireRow.Hidden = False End If Application.ScreenUpdating = True End Sub 

哦! 只要把之前Set targmsg因为他们是一个Range 。 当声明范围时,你必须有Set ,即Set myRng = Range("A1:A10")

如果只是Set Targ = "DetailsB6"不起作用,您可能需要Set targ = Range("Details!B6")

第二个想法,我不认为Set Targ = "Details!B6"将工作,如果你是Dim Targ as Range 。 你作为一个范围昏暗,但声明它像一个string。 你需要这个是一个范围,使用它像targ.EntireRow.Hidden