【发布时间】:2019-08-24 02:17:57
【问题描述】:
我正在尝试在我的工作表顶部创建一个命令按钮,按下该按钮将复制 A:AJ 列中包含数据的最后 2 行并粘贴到它们下方的下一个空行中。我希望复制源样式和公式,而不是手动输入的数据。我这里也有一张图片可以帮助您:
例如,从图像中。我想将第 105/106 行复制在一起,然后将它们粘贴到 107/108,因为它们是下一个空行(虽然隐藏,所以也需要取消隐藏这些行)。 除了底部的“笔画”部分和par/strokes框是我想要复制的公式/日期/数据验证/下拉列表之外,这两行中的所有内容都应该复制,但笔画部分为空,日期/下拉列表也为空.我希望它看起来都一样(复制样式)。在这种情况下要清除的填充单元格将是 B、C、E:M、P:X 列,但仅在“STROKES”行上。
更简单地说。我想要一个按钮来按下它将在表格中添加另一行。所以我在图片中有 52 个,你可以看到,当按下时,我现在下面有 53 个,它是空白的,可以使用了。
如果需要取消隐藏隐藏的行才能使其工作,我可以这样做。
我想尝试自己做,但我以前从未用 VBA 做过任何事情,所以我不知道。 我希望有人能理解这个要求,甚至是可行的。 谢谢。
根据 DecimalTurn 的回答,我做了一些更改,这是我的新代码:
Private Sub CommandButton1_Click()
'Find the last row based on column D (4th)
Dim LastRow As Long
LastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 4).End(xlUp).Row
'Copy the range
ActiveSheet.Range("A" & (LastRow - 1) & ":" & "AJ" & LastRow).Copy
ActiveSheet.Range("A" & (LastRow + 1) & ":" & "AJ" & LastRow + 2).PasteSpecial
Application.CutCopyMode = False 'This will clear the clipboard
'Adjust numbering
ActiveSheet.Range("A" & LastRow + 1).Value2 = ActiveSheet.Range("A" & LastRow - 1).Value2 + 1
'Clear content
Dim ListOfColumnsToClear1() As Variant
Dim ListOfColumnsToClear2() As Variant
ListOfColumnsToClear1 = Array("B:C")
ListOfColumnsToClear2 = Array("E:M", "P:X")
Dim i As Long
For i = LBound(ListOfColumnsToClear1) To UBound(ListOfColumnsToClear1)
Intersect(ActiveSheet.Range("A" & (LastRow + 1) & ":" & "AJ" & LastRow + 2), ActiveSheet.Range(ListOfColumnsToClear1(i))).ClearContents
Next i
For i = LBound(ListOfColumnsToClear2) To UBound(ListOfColumnsToClear2)
Intersect(ActiveSheet.Range("A" & (LastRow + 2) & ":" & "AJ" & LastRow + 2), ActiveSheet.Range(ListOfColumnsToClear2(i))).ClearContents
Next i
End Sub
这可能是完全错误的,但它确实有效。
【问题讨论】:
-
在这种情况下要删除的填充单元格将是 B105、C105、E106:M106、P106:X106 列