Loops 隐藏单元格上方的1行和下方的8行,该单元格根据另一张图纸中的拾取列表进行更改

Loops 隐藏单元格上方的1行和下方的8行,该单元格根据另一张图纸中的拾取列表进行更改,loops,excel,excel-2007,vba,Loops,Excel,Excel 2007,Vba,我正在尝试自动化一个报告表单。从表1上的验证下拉列表中选择的文本值通过公式指定表9上的单元格是否具有在第一张表中输入的值或值的串联混合值 Sheet9基本上包含200个空白表,包括中间的行,每个表9行,我们关心的单元格给每个表一个标题,表示它们需要完成。任何没有标题的表都应该隐藏 我将一个范围命名为JanRange,它只是标题单元格,我希望循环到每个目标标题单元格,评估它是否显示值,如果没有,则隐藏从上面1行到下面8行的行块 我已经找遍了所有地方,但我尝试运行的任何东西似乎都不起作用。我想我遇到

我正在尝试自动化一个报告表单。从表1上的验证下拉列表中选择的文本值通过公式指定表9上的单元格是否具有在第一张表中输入的值或值的串联混合值

Sheet9基本上包含200个空白表,包括中间的行,每个表9行,我们关心的单元格给每个表一个标题,表示它们需要完成。任何没有标题的表都应该隐藏

我将一个范围命名为JanRange,它只是标题单元格,我希望循环到每个目标标题单元格,评估它是否显示值,如果没有,则隐藏从上面1行到下面8行的行块

我已经找遍了所有地方,但我尝试运行的任何东西似乎都不起作用。我想我遇到的主要问题是,根据Sheet9上的单元格,通过依赖于Sheet1更改的公式,运行Sheet9的代码

如果你需要我提供更多的细节,请直接询问

非常感谢,

扣篮

编辑:

因此,我现在获得了以下代码,它将成功隐藏我命名区域中每个标题单元格的行:

Sub Worksheet_Calculate()
Application.ScreenUpdating = False
Dim Cell As Range
   For Each Cell In Range("TestRange")
      If Cell.Value = "" Then
      Cell.EntireRow.Hidden = True
      Else: Cell.EntireRow.Hidden = False
      End If
   Next
Application.ScreenUpdating = True
End Sub
太棒了!但我需要将隐藏的内容扩展到上面1行和下面8行的九行块,而不仅仅是一行。有什么想法吗

编辑:

刚刚尝试了下面的代码,但出现运行时错误1004:应用程序定义错误或对象定义错误

Sub Worksheet_Calculate()
Application.ScreenUpdating = False
Dim cell As Range
    For Each cell In Range("TestRange")
        If cell.Value = "" Then
        cell.Offset(-1, 1).Resize(8, 0).Select
        Selection.EntireRow.Hidden = True
        Else: cell.Offset(-1, 1).Resize(8, 0).Select
        Selection.EntireRow.Hidden = False
        End If
    Next
Application.ScreenUpdating = True
End Sub
编辑:

好吧,我想我已经做到了以下几点:

Sub Worksheet_Activate()
Application.ScreenUpdating = False
    Dim rngMyRange As Range
    Dim cell As Range
            Dim x As Integer
            Dim y As Integer
    Set rngMyRange = Range("TestRange")
    For Each cell In rngMyRange.Cells
        If cell.Value = "" Then
                                    x = cell.Row - 1
                                    y = cell.Row + 6
            Rows("" & x & ":" & "" & y & "").Select
            Selection.EntireRow.Hidden = True
        Else:                       x = cell.Row - 1
                                    y = cell.Row + 6
            Rows("" & x & ":" & "" & y & "").Select
            Selection.EntireRow.Hidden = False
        End If
    Next cell
Application.ScreenUpdating = True

End Sub
由于某些原因,它不适用于工作表\u calculate,但由于数据输入位于不同的选项卡上,因此使用工作表\u activate工作正常:

编辑:


好了,现在我把它放到了我的完整工作簿中,而不是小规模的测试版本中,让代码在JanRange的200个单元格上运行需要10秒的时间。我不想让它停留在工作表上,计算,甚至激活工作表。我已尝试将其关联到Sheet1上的表单控件按钮,但它不起作用。

据我所知,您需要的是:

自动捕获图纸1中的更改的步骤 根据此更改自动隐藏第二个工作表中的单元格 因此: 1.将工作表更改方法添加到VBA中的Sheet1 2.在上述方法中,只需使用例如

Range("1:10").EntireRow.Hidden = true
此代码将隐藏第1-10行


使用工作表更改方法的挫折在于,我记得您将无法使用撤消功能CTRL+Z

Hi Tkacprow,谢谢您的评论!这样做的问题是,需要单独指定200个不同的范围,这将非常耗时。我希望有一种方法可以在JanRange表标题单元格中循环,并相对于范围中每个单元格的单元格地址隐藏上面的第1行和下面的第8行。