Vba 基于其他工作表中的值隐藏变量RangeName

Vba 基于其他工作表中的值隐藏变量RangeName,vba,excel,loops,for-loop,Vba,Excel,Loops,For Loop,目前,我正在使用数组使工作代码变小。我稍后会解释守则, 如果要求数据表中包含某个零件,则此工作表称为高压研磨辊,用户可以通过在工作表VulFormular中输入值a来定义此工作表。现在,如果单元格值为a,数据表上可以有几个部分。如果我们有partA、partB和partC,单元格的RangeName将是SheetsInvulFormiler上零件的名称。板材压力研磨辊上范围的范围名称将为零件名称+1。例如第1部分。此范围必须隐藏,具体取决于用户是否为partA输入 这是我使用和使用的代码,但特定

目前,我正在使用数组使工作代码变小。我稍后会解释守则,

如果要求数据表中包含某个零件,则此工作表称为高压研磨辊,用户可以通过在工作表VulFormular中输入值a来定义此工作表。现在,如果单元格值为a,数据表上可以有几个部分。如果我们有partA、partB和partC,单元格的RangeName将是SheetsInvulFormiler上零件的名称。板材压力研磨辊上范围的范围名称将为零件名称+1。例如第1部分。此范围必须隐藏,具体取决于用户是否为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

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

我在下一页找到了有用的信息:


如果我正确理解您的问题,您可以尝试以下方法:

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

我不清楚RangeName是什么。它是工作表上的命名区域吗?不,我之所以使用它,是因为我认为它可能引用单元格的名称。重要的是复选框值是前导的。它们决定某个零件是否隐藏在高压研磨辊板上。因此,如果零件a的值为a,则该零件不会隐藏在高压表上。。。。同样重要的是,一个范围的名称并不是所有时间的一部分,它可能是很多东西。我认为你正确地理解了这个问题。当我运行脚本时,它会声明:运行时错误“9”:下标超出范围。请解释一下RangeSpilt发生了什么。。。第1节cell.Name.Name返回类似Invulformulier的内容!第三部分。2Splitcell.Name.Name!将该字符串划分为一个数组,假设|作为分隔符3,该数组的第二个索引返回partc4,3&1返回partC1。4个薄板高压研磨辊。范围3返回所需范围HMM ok。我理解代码,但不知道为什么会发生错误。所有的名称都是正确的。我尝试了替换函数。到目前为止,这是有效的!谢谢你的概念!这就是我使用的:RangeReplacecell.Name.Name、cell.Name.Name、cell.Name.Name&1.EntireRow。。。
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