根据其他工作表

时间:2017-01-13 10:36:42

标签: excel vba excel-vba loops for-loop

目前,我正致力于使用数组制作更小的工作代码。我将尽快解释一下代码;

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

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

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?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

这可以按照您的要求进行吗?它将隐藏“高压研磨辊”上的所有命名范围。工作表,然后显示包含相应复选框值的行。

我在以下页面找到了有用的信息: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