隐藏单元格下方的1行和8行,该单元格根据另一个工作表中的选项列表进行更改

时间:2014-07-30 18:10:06

标签: loops excel-vba excel-2007 vba excel

我正在尝试自动化报告表单。从Sheet1上的验证下拉列表中选择的文本值(通过公式),无论Sheet9上的单元格是否具有值“”或在第一张纸上输入的值的串联混合。

Sheet9基本上包含200个空白表(包括其间的行,每个表9行),我们关注的单元格为每个表提供一个标题,表示它们需要完成。任何没有标题的表都应该被隐藏。

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

我看了遍布这个地方,但我试图运行的任何东西似乎都不起作用(我认为我遇到的主要问题是让Sheet9的代码基于Sheet9上的单元格运行,通过公式取决于Sheet1的变化

如果您需要我提供更多详细信息,请直接询问!

非常感谢,

邓克

修改

所以我现在得到以下代码,它将成功隐藏我命名范围内每个标题单元格的行:

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

由于某种原因,它不能与Worksheet_calculate()一起使用,但由于数据输入位于不同的选项卡上,因此使用Worksheet_activate()可以正常工作:)

修改

好了,现在已经把它放到我的完整工作簿而不是小规模的测试版本中,让JanRange中的200个单元格上的代码运行在10秒的范围内。我不希望这种情况发生在Worksheet_calculate甚至worksheet_activate上。我已经尝试将它与Sheet1上的表单控件按钮相关联,但它不起作用..

1 个答案:

答案 0 :(得分:0)

据我所知,你需要的是:

  1. 自动捕捉Sheet1中的更改​​
  2. 根据此更改自动隐藏第二个工作表中的单元格
  3. 因此: 1.将工作表更改的方法添加到VBA中的Sheet1 http://msdn.microsoft.com/en-us/library/office/ff839775(v=office.15).aspx 2.在上述方法中,只需使用例如

    隐藏单元格
    Range("1:10").EntireRow.Hidden = true
    

    此代码将隐藏1-10行。

    使用工作表更改方法的挫折是(我记得)你将无法使用撤消功能(CTRL + Z)