[英]Editing the code for a recorded Macro
我是使用宏和代码的新手,并且遇到了一个小问题。 我有一张工作表,可以在其中连续更新值。 由于这些更新是过程的一部分,因此我希望excel在我的工作簿的下一张工作表中将行记录为一种历史记录。 我记录了一个宏,当我按cntrl + r时,它会复制数据表中的第一行,在历史记录页上插入一行,然后将数据复制到该新行上。 唯一的问题是我的数据表将包含多行数据,并且我希望宏能够复制我选择的行,而不仅仅是每次复制第一行。 我把代码放在下面。
谢谢!
Sub RecordTracker()
RecordTracker Macro
Records the updated row as a history row in Documentation Sheet
Keyboard Shortcut: Ctrl+r
Sheets("Documentation").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Tracker").Select
Range("A3:S3").Select
Selection.Copy
Sheets("Documentation").Select
Range("A1").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub
抱歉,我的代码格式有些不对。 第一篇文章!
你的第一个前加入这一行.Select
:
r = ActiveCell.Row
然后您要更改此行:
Range("A3:S3").Select
对此:
Range("A" & Cstr(r) & ":S" & Cstr(r)).Select
我认为应该这样做。
注意:使用.Select
速度很慢,并且存在一些其他可靠性/交互性问题,因此我们通常建议不要使用它。 但是,如果没有它,很难执行真正的复制操作,因此在这种情况下可能还可以。 但是 ,如果您确实不需要真正的副本(格式,公式等),而只想要该值,那么有一种更好的方法来做到这一点。
这是一个更好的方法,因为您只需要数据。 我将其分为几行,以便您看到它是如何完成的。
Sub RecordTracker()
'RecordTracker Macro
'Records the updated row as a history row in Documentation Sheet
'Keyboard Shortcut: Ctrl r
' get the worksheet objects
Dim wsDoc As Worksheet, wsTrak As Worksheet
Set wsDoc = Sheets("Documentation")
Set wsTrak = Sheets("Tracker")
' get the source (current) row
Dim r As Long
r = ActiveCell.Row
'Make the output row
wsDoc.Range("A2").EntireRow.Insert shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove '.Range("A2:S2").Select
' get the source data
Dim dat() As Variant
dat = wsTrak.Range("A" & CStr(r) & ":S" & CStr(r))
' set the output range
Dim outRng As Range
Set outRng = wsDoc.Range("A2:S2")
' copy data to the output range
outRng = dat
End Sub
A2
)中的工作表Documentation
上插入新行 Tracker
,范围A:S
) Documentation
A2
(这是您新创建的行)上 这需要粘贴到工作表Tracker
VBE中才能执行
请注意,通过避免使用.Select
方法,可以大大减少代码(就行而言)。 您可以在这里找到一些有用的信息
Sub StoreChanges()
Sheets("Documentation").Range("A2").EntireRow.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Tracker").Range(Cells(ActiveCell.Row, "A"), Cells(ActiveCell.Row, "S")).Copy
Sheets("Documentation").Range("A1").PasteSpecial Paste:=xlPasteValues
End Sub
我假设在数据表(跟踪器)中,您想要粘贴选定的范围/行,而不仅仅是第三行A3:S3
我记录了一个宏,当我按cntrl + r时,它会复制数据表的第一行,在历史记录页上插入一行,然后将数据复制到该新行上
尝试删除Range("A3:S3").Select
代码行。 现在,当您在工作表跟踪器中手动选择一行时,该行应在代码Selection.Copy
使用。
Sheets("Documentation").Select
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Sheets("Tracker").Select
## removed Range("a3:s3").select
Selection.Copy
Sheets("Documentation").Select
如果要从第二行开始添加新行,只需在代码Selection.Insert
之前添加Sheets("Documentation").Rows("2:2").Select
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.