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
答案 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