VBA-基于另一行的隐藏/取消隐藏状态隐藏/取消隐藏行
我试图编写一些VBA代码,如果另一个特定行被隐藏,它将取消隐藏整行。此宏还基于特定列中的值隐藏一系列行。这方面的工作很好-我有可靠的代码。我无法使我描述的第一个函数工作。应该很容易做到,只是不知道语法。此子例程应在打开工作簿时执行VBA-基于另一行的隐藏/取消隐藏状态隐藏/取消隐藏行,vba,excel,Vba,Excel,我试图编写一些VBA代码,如果另一个特定行被隐藏,它将取消隐藏整行。此宏还基于特定列中的值隐藏一系列行。这方面的工作很好-我有可靠的代码。我无法使我描述的第一个函数工作。应该很容易做到,只是不知道语法。此子例程应在打开工作簿时执行 Private Sub Workbook_Open() Application.ScreenUpdating = False Dim targ As Range Dim msg As Range targ = "DETAILS!B6" msg = "DETAILS
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
您需要设置如下所示的变量
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
您需要设置如下所示的变量
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
放在target
和msg
之前,因为它们是范围
。声明范围时,必须设置Set
,即Set myRng=Range(“A1:A10”)
如果只是Set targ=“DetailsB6”
不起作用,您可能需要执行Set targ=Range(“Details!B6”)
仔细想想,如果您是
Dim Targ as Range
,我认为Set Targ=“Details!B6”
将不起作用。您将其变暗为一个范围,但将其声明为一个字符串。您需要将其设置为一个范围,以便像target.EntireRow.Hidden
等那样使用它。哦!只需将Set
放在target
和msg
之前,因为它们是范围
。声明范围时,必须设置Set
,即Set myRng=Range(“A1:A10”)
如果只是Set targ=“DetailsB6”
不起作用,您可能需要执行Set targ=Range(“Details!B6”)
仔细想想,如果您是
Dim Targ as Range
,我认为Set Targ=“Details!B6”
将不起作用。您将其变暗为一个范围,但将其声明为一个字符串。您需要将其作为一个范围,以便像target.EntireRow.Hidden等那样使用它。尽管您可以这样调用范围对象: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
尽管您可以这样调用范围对象: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
你把代码放在哪里了?它应该位于工作簿对象(ThisWorkbook)的私有模块中。这是你的问题是的,代码是有效的,它只是没有在打开时启动?是的,它是ThisWorkbook
对象。打开工作簿时,出现以下错误:运行时错误91:Object variable或With block variable not set
。当我点击“调试”时,突出显示的行是target=“DETAILS!B6”
。可能是我给targ
变量赋值的值,你把代码放在哪里了?它应该位于工作簿对象(ThisWorkbook)的私有模块中。这是你的问题是的,代码是有效的,它只是没有在打开时启动?是的,它是ThisWorkbook
对象。打开工作簿时,出现以下错误:运行时错误91:Object variable或With block variable not set
。当我点击“调试”时,突出显示的行是target=“DETAILS!B6”
。可能是我分配给targ
变量的值