Copy/Paste 到下一行
Copy/Paste to Next Row
我的 Worksheet_Calculate
活动进行得很好。但是,当它粘贴时,它会在 sht2
上找到下一个打开的行,然后一旦再次触发事件,它就会重新粘贴到它第一次粘贴的原始行上。目标是每次在 sht2
上触发事件时在下一个可用行中 copy/paste A39:Q39
,而不是覆盖之前的粘贴。
Private Sub Worksheet_Calculate()
Dim timeCells As Range, i As Integer
If Worksheets("Dashboard").ToggleButton1.Value = True Then
On Error GoTo SafeExit
Application.EnableEvents = False
'TimeLog
Set timeCells = Me.Range("D4:D393")
Set sht1 = ThisWorkbook.Sheets("Dashboard")
Set sht2 = ThisWorkbook.Sheets("Log")
Set cpyRng = sht1.Range("A39:Q39")
Set rngLogTargetBeginningCell = sht2.Cells(Rows.Count, 1).End(xlUp)
Set rngLastCellSelection = Selection
Application.ScreenUpdating = False ' Stop Updating Graphic during data copy
'TimeLog
For i = 1 To UBound(myArrTimeLog)
If timeCells(i, 1).Value <> myArrTimeLog(i, 1) Then
cpyRng.Copy
rngLogTargetBeginningCell.Offset(0, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False ' Remove the copy area marker
rngLastCellSelection.Select ' reselect the old cell
Application.ScreenUpdating = True ' update graphics again
End If
Next i
End If
SafeExit:
Application.EnableEvents = True
PopulateTimeLog
End Sub
一个简单的任务需要大量代码。
您的代码复制到与之前完全相同的位置,因为您告诉代码从最后一行的单元格 1 旁边的一列开始。
将粘贴行中的偏移量更改为
rngLogTargetBeginningCell.Offset(1, 0).PasteSpecial xlPasteValues
你可以开始了。
由于您的代码中有更多内容,我无法在没有更多信息的情况下进行解释,因此我无法肯定地告诉您它是否有效...但可能会尝试...
我的 Worksheet_Calculate
活动进行得很好。但是,当它粘贴时,它会在 sht2
上找到下一个打开的行,然后一旦再次触发事件,它就会重新粘贴到它第一次粘贴的原始行上。目标是每次在 sht2
上触发事件时在下一个可用行中 copy/paste A39:Q39
,而不是覆盖之前的粘贴。
Private Sub Worksheet_Calculate()
Dim timeCells As Range, i As Integer
If Worksheets("Dashboard").ToggleButton1.Value = True Then
On Error GoTo SafeExit
Application.EnableEvents = False
'TimeLog
Set timeCells = Me.Range("D4:D393")
Set sht1 = ThisWorkbook.Sheets("Dashboard")
Set sht2 = ThisWorkbook.Sheets("Log")
Set cpyRng = sht1.Range("A39:Q39")
Set rngLogTargetBeginningCell = sht2.Cells(Rows.Count, 1).End(xlUp)
Set rngLastCellSelection = Selection
Application.ScreenUpdating = False ' Stop Updating Graphic during data copy
'TimeLog
For i = 1 To UBound(myArrTimeLog)
If timeCells(i, 1).Value <> myArrTimeLog(i, 1) Then
cpyRng.Copy
rngLogTargetBeginningCell.Offset(0, 1).PasteSpecial xlPasteValues
Application.CutCopyMode = False ' Remove the copy area marker
rngLastCellSelection.Select ' reselect the old cell
Application.ScreenUpdating = True ' update graphics again
End If
Next i
End If
SafeExit:
Application.EnableEvents = True
PopulateTimeLog
End Sub
一个简单的任务需要大量代码。 您的代码复制到与之前完全相同的位置,因为您告诉代码从最后一行的单元格 1 旁边的一列开始。 将粘贴行中的偏移量更改为
rngLogTargetBeginningCell.Offset(1, 0).PasteSpecial xlPasteValues
你可以开始了。 由于您的代码中有更多内容,我无法在没有更多信息的情况下进行解释,因此我无法肯定地告诉您它是否有效...但可能会尝试...