【发布时间】:2018-08-17 18:07:16
【问题描述】:
我还有一个问题希望能在您的帮助下解决。
我想做什么。 我使用 Excel 来跟踪我的工作、活动、联系人等。在这样做的同时,我发现我在一个名为“活动”的工作表的末尾添加行时做了很多重复的工作。
我想做的是: - 按一个按钮并添加一行。 - 将trackingnumber增加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
问题。 在这张表中,我打开了新项目,但我也关闭了它们。我通过更改它们的状态并将它们从视图中隐藏来做到这一点。这就是它出错的地方。当我关闭列表中的 last item 并想要添加新行时,宏会在 last visible 条目下方添加 new row。它没有找到我刚刚隐藏的最后一个条目。而且,发生这种情况时,将默认值添加到新行不起作用。它将它们添加到添加的行上方。
不知何故,这完全有道理。我告诉宏查找最后一个条目,但我不明白为什么它会查看最后一个 visible 条目以及为什么它不查看隐藏行。
复制。将代码复制到工作表中(也许您需要更改工作表的名称)并添加几行。将一些信息放在最后一行并将其隐藏。添加另外几行,看看会发生什么。
解决方案。有没有办法解决这个问题?也许有更聪明的做事方式?我调查了一些事情,但大多数情况下我使用“(”A“&Rows.Count).End(xlUp)”得到了结果。循环可以工作,但我担心 1)它不会搜索隐藏的行和 2)它会使工作表(有点)迟缓。我必须说我已经尝试过循环,首先我想看看我的第一个解决方案是否可以挽救。
感谢您的意见,如果有任何问题,请告诉我。
西蒙 编辑:任何感兴趣的人的工作代码
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
【问题讨论】:
-
我将以您的问题为例说明如何提出问题。
-
也许MSDN - SpecialCells 可能会有所帮助。特别是
xlCellTypeLastCell