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
targ
和msg
因为他们是一个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
等