Excel VBA:隐藏和取消隐藏代码不起作用

Excel VBA:隐藏和取消隐藏代码不起作用,excel,vba,Excel,Vba,我是VBA新手,一直在尝试编写一个代码,根据特定单元格地址的输入值隐藏和取消隐藏行。然而,它不起作用,我也不知道为什么。我已将我的代码张贴在下面: Sub Hide() If Worksheets("IS").Range("B8").Value = "Show All" Then Worksheets("IS").Rows("12:165").EntireRow.Hidden = False End If If Worksheets("IS").Range("B8").Value =

我是VBA新手,一直在尝试编写一个代码,根据特定单元格地址的输入值隐藏和取消隐藏行。然而,它不起作用,我也不知道为什么。我已将我的代码张贴在下面:

Sub Hide()

If Worksheets("IS").Range("B8").Value = "Show All" Then
   Worksheets("IS").Rows("12:165").EntireRow.Hidden = False
End If

If Worksheets("IS").Range("B8").Value = "Just Revenue" Then
   Worksheets("IS").Rows("12:165").EntireRow.Hidden = False
   Worksheets("IS").Rows("28:165").EntireRow.Hidden = True
End If

If Worksheets("IS").Range("B8").Value = "Just Expenses" Then
   Worksheets("IS").Rows("12:165").EntireRow.Hidden = False
   Worksheets("IS").Rows("12:27").EntireRow.Hidden = True
   Worksheets("IS").Rows("160:165").EntireRow.Hidden = True
End If

If Worksheets("IS").Range("B8").Value = "Just Cogs" Then
   Worksheets("IS").Rows("12:165").EntireRow.Hidden = False
   Worksheets("IS").Rows("12:27").EntireRow.Hidden = True
   Worksheets("IS").Rows("64:165").EntireRow.Hidden = True
End If

If Worksheets("IS").Range("B8").Value = "Just Totals" Then
   Worksheets("IS").Rows("12:165").EntireRow.Hidden = False
   Worksheets("IS").Rows("12:25").EntireRow.Hidden = True
   Worksheets("IS").Rows("28:61").EntireRow.Hidden = True
   Worksheets("IS").Rows("64:91").EntireRow.Hidden = True
   Worksheets("IS").Rows("93:155").EntireRow.Hidden = True
End If

End Sub

任何关于为什么我的代码不起作用的帮助或任何改进它的提示都将不胜感激

需要将此代码粘贴到要执行代码的工作表上。一旦代码存在,您就不需要用工作表限定您的范围

您可以直接参考您的范围,而无需使用
工作表(“IS”)。
因此:
行(“某某”).EntireRow.Hidden=True

您现在也可以通过变量引用您的
TargetRange
,如下所示:
如果MyTarget=“Just Revenue”,则

我在代码中插入了一个条件作为示例

Option Explicit

Private Sub worksheet_change(ByVal target As Range)

Dim MyTarget As Range
Set MyTarget = Range("B8")

If Not Intersect(target, MyTarget) Is Nothing Then
Application.EnableEvents = False

'Your CODE HERE
If MyTarget = "Show All" Then
Rows("12:165").EntireRow.Hidden = False
End If

Application.EnableEvents = True
End If

End Sub

需要将此代码粘贴到要执行代码的工作表上。一旦代码存在,您就不需要用工作表限定您的范围

您可以直接参考您的范围,而无需使用
工作表(“IS”)。
因此:
行(“某某”).EntireRow.Hidden=True

您现在也可以通过变量引用您的
TargetRange
,如下所示:
如果MyTarget=“Just Revenue”,则

我在代码中插入了一个条件作为示例

Option Explicit

Private Sub worksheet_change(ByVal target As Range)

Dim MyTarget As Range
Set MyTarget = Range("B8")

If Not Intersect(target, MyTarget) Is Nothing Then
Application.EnableEvents = False

'Your CODE HERE
If MyTarget = "Show All" Then
Rows("12:165").EntireRow.Hidden = False
End If

Application.EnableEvents = True
End If

End Sub

工作表更改的重写:

在VBE中,将此代码粘贴到“IS”工作表的代码表中(在
Project-VBAProject
窗格中双击它。如果
Project-VBAProject
窗格在VBE中不可见,请转到
查看
>
Project Explorer
):

我们可以将VBA连接到很多事件(SelectionChange、双击、工作簿关闭等)。在本例中,我们将连接到
工作表\u Change()

每次此工作表发生更改时都会触发此代码。
Target
变量将保持触发事件的范围。因此,我们测试
目标是否与
范围(“B8”)
相交,这意味着
B8
已更改。然后我们在
If
块中执行代码

我将您的
If/ElseIf
切换到了
Select/Case
,因为我们反复测试单个条件(B8的值),这使得代码更清晰


在这段代码中,我们还关闭了Excel应用程序的启用事件功能。此功能首先允许触发此
工作表\u Change()
。在代码中,我们经常对工作表进行更多的更改(例如隐藏行或列),这将触发应用程序再次运行
worksheet\u Change()
。。。当它正在运行
工作表\u Change()
时。这可能会导致代码过量运行,并且常常会导致无休止的循环,从而导致excel崩溃

工作表更改的重写:

在VBE中,将此代码粘贴到“IS”工作表的代码表中(在
Project-VBAProject
窗格中双击它。如果
Project-VBAProject
窗格在VBE中不可见,请转到
查看
>
Project Explorer
):

我们可以将VBA连接到很多事件(SelectionChange、双击、工作簿关闭等)。在本例中,我们将连接到
工作表\u Change()

每次此工作表发生更改时都会触发此代码。
Target
变量将保持触发事件的范围。因此,我们测试
目标是否与
范围(“B8”)
相交,这意味着
B8
已更改。然后我们在
If
块中执行代码

我将您的
If/ElseIf
切换到了
Select/Case
,因为我们反复测试单个条件(B8的值),这使得代码更清晰


在这段代码中,我们还关闭了Excel应用程序的启用事件功能。此功能首先允许触发此
工作表\u Change()
。在代码中,我们经常对工作表进行更多的更改(例如隐藏行或列),这将触发应用程序再次运行
worksheet\u Change()
。。。当它正在运行
工作表\u Change()
时。这可能会导致代码过量运行,并且常常会导致无休止的循环,从而导致excel崩溃

当您更改B8中的值时,如何执行此子例程?它不会自动执行。您必须按下按钮或附加到工作表事件,或手动运行它或其他操作。我在单元格B8上有一个列表(通过数据验证),其中有下拉选项Show all,Just revenues..etc但代码是如何执行的。是否有按钮,您是否进入VBE并点击“播放”按钮或F5?设置下拉菜单后手动运行代码时会发生什么情况?没有按钮;我们的目标是让它一直运行,以便每次更改B8中的值时,都会隐藏正确的行。这是不可能的吗?如果你想让它随时运行,你可以试着从工作表_change事件调用这个子程序……当你改变B8中的值时,你如何执行这个子程序?它不会自动执行。您必须按下按钮或附加到工作表事件,或手动运行它或其他操作。我在单元格B8上有一个列表(通过数据验证),其中有下拉选项Show all,Just revenues..etc但代码是如何执行的。是否有按钮,您是否进入VBE并点击“播放”按钮或F5?设置下拉菜单后手动运行代码时会发生什么情况?没有按钮;我们的目标是让它一直运行,以便每次更改B8中的值时,都会隐藏正确的行。那不可能吗?嗯