如何隐藏具有可变数据的行?

时间:2018-08-20 01:51:30

标签: excel vba excel-vba

top part of the worksheet enter image description here

VBA的新手,我正在尝试开发一个宏来进行一些格式化。我的工作表中有可变数量的数据(行明智,列相同)。在最后一行数据之后,有一堆空白的白色行,在最底部是灰色阴影的行。我想将所有空白的白色行隐藏在中间,以便灰色阴影的行位于我最后一行的下面,其中有数据。

这是我到目前为止的代码(注意:第一列是最后一列)。任何帮助将不胜感激。现在,我收到了“ BeforeFinalRow = finalRow-1”部分的“类型不匹配”错误,但是我敢肯定,此代码还有很多错误。预先感谢!

    Sub hide_rows()

      Dim BelowUsedData As Long
        BelowUsedData = Cells(Rows.Count, 2).End(xlUp).Row + 1
      Dim RowBelowUsedData As Range
        RowBelowUsedData = Range("A" & BelowUsedData, "I" & BelowUsedData)
        Range("A1").Select
        Selection.End(xlDown).Select
      Dim finalRow As Range
        finalRow = Range(Selection, Selection.End(xlToRight))
      Dim BeforeFinalRow As Long
        BeforeFinalRow = finalRow - 1
        Rng = Range(Cells(RowBelowUsedData, "A"), Cells(BeforeFinalRow, "I")).Select
        Selection.EntireRow.Hidden = True

    End Sub

3 个答案:

答案 0 :(得分:1)

在照片上,行似乎不是隐藏的而是灰色的。下面的代码将查找颜色的变化位置,并将最后一行包含数据的数据和第一个灰色单元格之间的白色行隐藏起来:

Sub hide_rows()

Dim rngData As Range
Dim rngFirstCelltoHide As Range
Dim rngLastWhite As Range

Set rngData = Range("B1").CurrentRegion
Set rngFirstCelltoHide = rngData.Cells(rngData.Rows.Count, 1).Offset(1, 0)
Set rngLastWhite = rngFirstCelltoHide

Do Until rngLastWhite.Interior.Color <> rngLastWhite.Offset(1, 0).Interior.Color
    Set rngLastWhite = rngLastWhite.Offset(1, 0)
Loop

Range(rngFirstCelltoHide, rngLastWhite).EntireRow.Hidden = True

End Sub

答案 1 :(得分:0)

finalRow是范围对象。这就是为什么从中减去1会得到“类型错误”的原因。将变量声明为long,并为其分配行号,如下所示: finalRow = Range(Selection,Selection.End(xlToRight))。Row

答案 2 :(得分:0)

您可以简化此过程,并将底部边框单元格硬编码为代码(只需更改代码中的BottomBorder的值)

Option Explicit

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim LRow As Long, BottomBorder As Long

LRow = ws.Range("B" & ws.Rows.Count).End(xlUp).Offset(1).Row
BottomBorder = 1006   'Change this if your bottom border changes

ws.Range(ws.Cells(LRow, 1), ws.Cells(BottomBorder, 1)).EntireRow.Hidden = True

End Sub

另一种选择是使用WorkSheet_Change事件。仅当您一次在一个条目(行)中输入数据时,这才起作用。

要实现::隐藏所有未使用的行(1除外)!因此,如果您上次使用的单元格是B4,则将B6向下隐藏到BottomBorder,这会将B5留为空白行,您的下一个条目将进入该行。然后将以下代码粘贴到VBE的工作表中。每次在此处的空白行(B5)中进行输入时,宏都会插入一个新行,并保持您的当前格式。

这是动态的,因此它还将查看下一个空白行(在B5之后,B6将是您的新目标行)

Private Sub Worksheet_Change(ByVal Target As Range)

Dim LRow As Long
LRow = Range("B" & Rows.Count).End(xlUp).Offset(1).Row

Application.EnableEvents = False
    If Target.Row = LRow - 1 And Target.Column = 2 Then
        Range("A" & LRow + 1).EntireRow.Insert (xlShiftUp)
    End If
Application.EnableEvents = True

End Sub