2015-09-21 2 views
1

Я пытаюсь скопировать строку активной ячейки и хочу вставить скопированную строку непосредственно под эту строку. Как так:Копировать строку активной ячейки и вставить скопированную строку непосредственно под

Row 1 < User clicks relevant cell to trigger macro (Active Row) 
Row 2 < Copied Cell gets inserted directly beneath Active Row 

Я хочу, чтобы это произошло, даже если есть строка уже ниже моей активной строки, т.е. это, когда пользователь щелкает скопировать активной строки:

Row 1 < Active Row 
Row 2 < Other Content 

превратится в это:

Row 1 < Active Row 
Row 2 < Copied Cell gets inserted directly beneath Active Row 
Row 3 < Other Content 

Вот мой код, который я пытался собрать не повезло:

'Add Tender Type Row 
Dim NextRow As Range 
Set NextRow = Range("B" & Sheets("Home").ActiveCell.Rows.Count + 1) 
If Not Intersect(Target, Range("AF" & ActiveCell.Row)) Is Nothing And Range("AF" & ActiveCell.Row).Value = "+" Then 
Sheet1.Range("B" & ActiveCell.Row & ":AF" & ActiveCell.Row).Copy 
Sheet1.Activate 
NextRow.PasteSpecial Paste:=1, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
Application.CutCopyMode = False 
End If 

Возможно, кто-нибудь покажет мне правильный способ сделать это?

ответ

0

Вы определение NextRow неправильно, вы использовали Sheets("Home").ActiveCell.Rows.Count + 1 вместо ActiveCell.Row + 1

Дайте этому попытку:

Sub Mark_Harris() 

Dim Ws As Worksheet, _ 
    NextRow As Range 

If Target.Cells.Count > 1 Then Exit Sub 
Set Ws = ActiveWorkbook.Sheets("Home") 


With Ws 
    If Not Intersect(Target, .Range("AF" & ActiveCell.Row)) Is Nothing And .Range("AF" & ActiveCell.Row).Value = "+" Then 
     .Rows(ActiveCell.Row + 1).Insert Shift:=xlDown 
     Set NextRow = .Range("B" & ActiveCell.Row + 1) 
     .Range("B" & ActiveCell.Row & ":AF" & ActiveCell.Row).Copy 
     NextRow.PasteSpecial Paste:=1, Operation:=xlNone, SkipBlanks:=False, Transpose:=False 
    End If 
End With 
Application.CutCopyMode = False 

End Sub 
Смежные вопросы