首页 > 解决方案 > 根据单元格值隐藏Excel中的行

问题描述

我有一个多项选择,选项按钮,根据选择将单元格 D7 的值从 1 更改为 5。如果值为 1,我想取消隐藏第 16 到 26 行,如果不同则隐藏它们,对于其他每个值,我都想隐藏它们。

但我什至无法让它工作,而且我不确定我做错了什么。

更新:如果我更改单元格值,则不会发生任何事情,但是如果我删除所有内容并添加它给出的值:“参数不是可选的”,它会为我突出显示这部分代码:

Private Sub Worksheet_Change(ByVal Target as Excel.Range)

谢谢

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If IsNumeric(Target) And Target.Address = "$D$7" Then
        Select Case Target.Value
            Case 0 To 90: Cell_Hider
        End Select
    End If
End Sub

Sub Cell_Hider(ByVal Target As Range)
    If Range("$D$7").Value = "1" Then
        Rows("16:26").EntireRow.Hidden = False
    Else
        Rows("16:26").EntireRow.Hidden = True
    End If
    
End Sub

标签: excelvba

解决方案


  1. 您的过程Cell_Hider需要一个参数,但您的代码在没有参数的情况下调用它Case 0 To 90: Cell_Hider
  2. Cell_Hider如果该值介于 0 和 90 之间,则调用该过程需要该值来1显示行,而 0 或 2 到 90 将隐藏它们。如果您将 100 放入该单元格,则根本不会发生任何事情。听起来不像你对我的期望。
  3. "1"是文字不是数字!

像下面这样的东西会起作用:

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If IsNumeric(Target) And Target.Address = "$D$7" Then
        Select Case Target.Value
            Case 0 To 90: Cell_Hider Target
        End Select
    End If
End Sub

Sub Cell_Hider(ByVal Target As Range)
    If Target.Value = 1 Then
        Target.Parent.Rows("16:26").EntireRow.Hidden = False
    Else
        Target.Parent.Rows("16:26").EntireRow.Hidden = True
    End If
End Sub

即使这对我来说看起来不合逻辑,我也不确定你到底想要达到什么目的。

请注意,您可以将其缩短为

Sub Cell_Hider(ByVal Target As Range)
    Target.Parent.Rows("16:26").EntireRow.Hidden = Not Target.Value = 1
End Sub

推荐阅读