【问题标题】:Hiding a variable RangeName based on value in other sheet根据另一个工作表中的值隐藏变量范围名称
【发布时间】:2017-01-13 10:36:41
【问题描述】:

目前我正在努力使用数组使工作代码更小。我将很快解释代码;

如果某个零件需要在数据表中(此工作表称为“高压研磨辊”),则用户可以通过在 Sheets(“Invulformulier”) 上输入值“a”来定义它。如果单元格值为“a”,现在有几个部分可以在数据表上。如果我们有“partA”、“partB”和“partC”,则单元格的 RangeName 将是 Sheets(“Invulformulier”)上部分的名称。 Sheets(“高压研磨辊”)上范围的 RangeName 将是零件的名称 +“1”。例如“partA1”。这个范围必须隐藏,具体取决于用户是否为“partA”输入“a”。

这是我使用和工作的代码,但特定于单元格名称:

Sub Hidecellv1 ()

   If Range("partA").Value = "a" Then
      Sheets("High Pressure Grinding Rolls").Range("partA1").EntireRow.Hidden = False
   ElseIf Range("partA").Value = "" Then
      Sheets("High Pressure Grinding Rolls").Range("partA1").EntireRow.Hidden = True
   End If

End Sub

这段代码很具体,我想做一个数组。这是我目前所拥有的:

Sub Hidecellwitharray ()    

    Dim rngName As Range
    Dim cell As Range

    Application.ScreenUpdating = False

    For Each cell In Range("Checkbox") 'Where user puts in value "a" or not
        If cell.Value = "a" Then
            Sheets("High Pressure Grinding Rolls").Range(RangeName & "1").EntireRow.Hidden = False

        Else
            Sheets("High Pressure Grinding Rolls").Range(RangeName & "1").EntireRow.Hidden = True
        End If
    Next cell
    Application.ScreenUpdating = True

End Sub

为每个部件搜索值“a”是可行的,但如果插入或未插入值“a”,我无法让它隐藏数据表中的部件。如何引用变量 RangeName?

【问题讨论】:

  • 我不清楚 RangeName 是什么。它是您工作表上的命名范围吗?
  • 不,我只是使用它,因为我认为它可能指的是单元格的名称。

标签: vba excel loops for-loop


【解决方案1】:

如果我正确理解了你的问题,你可以试试这个:

Option Explicit

Sub Hidecellwitharray()
    Dim cell As Range

    Application.ScreenUpdating = False
    For Each cell In Range("Checkbox") 'Where user puts in value "a" or not
        Sheets("High Pressure Grinding Rolls").Range(Split(cell.Name.Name, "!")(1) & "1").EntireRow.Hidden = Not cell.Value = "a"
    Next cell
    Application.ScreenUpdating = True
End Sub

【讨论】:

  • 我认为您正确理解了这个问题。当我运行您的脚本时,它指出:“运行时错误'9':下标超出范围”。请解释一下“范围(拆分...”部分发生了什么。
  • 1) cell.Name.Name 正在返回类似“Invulformulier!partC”的内容。 2)Split(cell.Name.Name, "!") 将该字符串划分为一个数组,假设为“|”作为分隔符 3) 该数组的第二个索引返回“partC” 4) 3) & "1" 返回“partC1”。 4)Sheets("High Pressure Grinding Rolls").Range( 3) )返回想要的范围
  • 嗯好的。我理解代码,但我不知道为什么会发生错误。所有的名字都是正确的。
  • 我已经尝试了替换功能。到目前为止,这有效!感谢您的概念!
  • 这是我使用的:"Range(Replace(cell.Name.Name, cell.Name.Name, cell.Name.Name & "1")).EntireRow..."跨度>
【解决方案2】:

这是否符合您的要求?它将隐藏“高压研磨辊”表上的所有命名范围,然后显示包含相应复选框值的行。

我在以下页面上找到了有用的信息:Loop through all named ranges in a Excel Sheet

 Sub Hidecellv1()

     Dim nm
     Dim rngName   

     For Each nm In ThisWorkbook.Names

         If Left(nm.Name, 4) = "Part" Then
         Sheets("High Pressure Grinding Rolls").Range(nm).EntireRow.Hidden = True
         End If

    Next nm   

    rngName = Range("checkbox").Value

    Sheets("High Pressure Grinding Rolls").Range("Part" & rngName & "1").EntireRow.Hidden = False

End Sub

【讨论】:

  • 重要的是复选框值领先。他们决定某个部分是否隐藏在“高压研磨辊”表上。因此,如果 partA 的值为“a”,则该部分不会隐藏在“高压...”表上。同样重要的是,范围的名称并非一直都是“部分”,它可能是很多东西。
猜你喜欢
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多