代码不会查看隐藏的行以添加包含跟踪编号的行

我希望在你的帮助下解决另一个问题。

我想做什么。 我使用Excel来跟踪我的工作,活动,联系人等等。 在做这件事情时,我发现我在做一个名为“活动”的工作表末尾添加行的重复性工作很多。

我想要做的是: - 按下按钮并添加一行。 - 使用1增加跟踪编号 - 插入默认值

代码。 为了实现这一点,我发现(复制,粘贴,调整它到我的需要)下面的代码:

 Sub AddRowActiviteiten_NewAtEnd()
'Add's a new row at the end of the sheet.

Dim wsActiviteiten As Worksheet
Set wsActiviteiten = Sheets("Activiteiten")

DefType = "Daily"
DefStatus = "Open"
DefIssue = "*****"
DefImpact = "*****"
DefPrio = "Laag"
MyDate = Date

wsActiviteiten.Range("A4").Value = "1"

'Copy the "One Row To Rule Them All"
wsActiviteiten.Range("A3:Q3").Copy

wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).PasteSpecial (xlPasteAll)

'Stop the "copy-action"
Application.CutCopyMode = False

'Increase the tracking number with "one"
LastNumber = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Value
wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Value = LastNumber + 1

'Insert default values
LastRow = wsActiviteiten.Range("A" & Rows.Count).End(xlUp).Offset(-1, 0).Row
Cells(LastRow + 1, 2) = DefType
Cells(LastRow + 1, 3) = DefStatus
Cells(LastRow + 1, 4) = DefIssue
Cells(LastRow + 1, 5) = DefImpact
Cells(LastRow + 1, 6) = DefPrio
Cells(LastRow + 1, 8) = MyDate

'Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select

End Sub

问题。 在这张表中,我打开了新的项目,但我也关闭了它们。 我通过改变他们的状态并将他们隐藏起来。 这是错误的地方。 当我关闭列表中的最后一项并且想要添加新行时,宏将在最后一个可见条目下添加一行。 它找不到我刚刚隐藏的最后一个条目。 此外,发生这种情况时,将默认值添加到新行不起作用。 它将它们添加到添加的行上方。

不知何故,这是非常合理的。 我告诉宏查找最后一个条目,但是我不明白的是为什么它查看最后一个可见条目以及它为什么不查看隐藏行。

复制。 将代码复制到工作表中(也许您需要更改工作表的名称)并添加几行。 在最后一行放一些信息并隐藏它。 再加几行,看看会发生什么。

解决方案。 有没有办法解决这个问题? 也许有更聪明的做事方式? 我研究了一些事情,但主要是使用“(”A“&Rows.Count).End(xlUp)”得到了结果“。 一个循环可以工作,但我担心1)它不会搜索隐藏的行和2)它使表单(有点)缓慢。 我必须说我已经尝试过循环,首先我想看看我的第一个解决方案是否可以挽救。

感谢您的意见,如果有任何问题,请告诉我。

Simon 编辑:任何感兴趣的人的工作代码

  Sub AddRowActiviteiten_NewAtEnd()
'Add's a new row at the end of the sheet.

Dim wsActiviteiten As Worksheet
Set wsActiviteiten = Sheets("Activiteiten")

DefType = "Daily"
DefStatus = "Open"
DefIssue = "*****"
DefImpact = "*****"
DefPrio = "Laag"
MyDate = Date

'Copy the One Row To Rule Them All
wsActiviteiten.Range("A3:Q3").Copy

'Offset(y,x)
'De -16 is een getal dat iets doet, maar ik weet niet wat.
wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).PasteSpecial (xlPasteAll)

'Stop the "copy-action"
Application.CutCopyMode = False

'Het volgnummer verhogen met 1
'Het laatste getal selecteren (LastNumber) en dan plus 1.
LastNumber = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(0, -16).Value
wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(1, -16).Value = LastNumber + 1

'Insert default values
LastRow = wsActiviteiten.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Offset(-1, 0).Row
Cells(LastRow + 1, 2) = DefType
Cells(LastRow + 1, 3) = DefStatus
Cells(LastRow + 1, 4) = DefIssue
Cells(LastRow + 1, 5) = DefImpact
Cells(LastRow + 1, 6) = DefPrio
Cells(LastRow + 1, 8) = MyDate

'Step down 1 row from present location.
ActiveCell.Offset(1, 0).Select

End Sub

更新

我发现你的工作表有一个自动过滤器“隐藏”状态行 - Find检测,不像隐藏的行。

建议您尝试下面的更新代码:

Sub Test()

Dim rng1 As Range
If ActiveSheet.AutoFilterMode Then
    MsgBox ActiveSheet.Range(Split(ActiveSheet.AutoFilter.Range.Address, ":")(1)).Row
Else
    Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
    If Not rng1 Is Nothing Then MsgBox rng1.Row
End If
End Sub

初始职位

如果您正在隐藏行,则可以使用FindxlFormulas选项来查找隐藏行中的条目(与xlValues不同)。

Dim rng1 As Range
Set rng1 = Columns("A:A").Find("*", [a1], xlFormulas, , xlByRows, xlPrevious)
MsgBox rng1.Address

假设我们有一个状态栏AB,并且我们通过在该栏中放置单词“Closed”然后隐藏该行来关闭一个项目。

代替:

  • 取消隐藏所有
  • 执行所有必需的插入和编辑
  • 通过循环,隐藏标记为“关闭”的所有行

  • 使用这个获得最后一行,它会看到最后一行,即使它是隐藏的。

    LastRow = wsActiviteiten.UsedRange.Rows.Count
    
    链接地址: http://www.djcxy.com/p/34757.html

    上一篇: code does not look through hidden rows for adding a row with tracking number

    下一篇: Stream<Stream>: flatMap vs. reduce