Ich habe einen kurzen Code, der im Grunde eine ausgewählte Zeile in ein anderes Blatt kopiert und löscht es von der ersten.VBA xlPasteValues schlägt auf dem zweiten Lauf
Aus irgendeinem Grund, wenn ich dies ausführen, wird es gut laufen, wenn ich dann eine andere Zeile auswählen, bekomme ich einen pasteSpecial method of RangeClass failed
Fehler.
Sub Completed()
Dim trackerRow As Integer, compRow As Integer, answer As Integer
Application.ScreenUpdating = False
Application.CutCopyMode = False
trackerRow = ActiveCell.Row
compRow = Sheets("Completed").Cells(Rows.Count, "B").End(xlUp).Row
If trackerRow < 3 Then Exit Sub
If Cells(trackerRow, 2) = "" Then
MsgBox "This row is empty, please select the candidate you want to move.", vbExclamation, "Empty Row"
Else
answer = MsgBox("Are you sure you want to move " & Cells(trackerRow, 3).Value & "?", vbYesNo, "Confirm move?")
If answer = vbYes Then
'move row
Rows(trackerRow).EntireRow.Copy
With ThisWorkbook
With .Sheets("Completed")
.Activate
.Unprotect "HSBC2017"
.Cells(compRow + 1, 1).PasteSpecial xlPasteValues '**error line**.
.Protect "HSBC2017"
End With
With .Sheets("Tracker")
.Unprotect "HSBC2017"
.Rows(trackerRow).EntireRow.Delete
.Protect "HSBC2017"
.Activate
End With
End With
End If
End If
Application.ScreenUpdating = True
Application.CutCopyMode = False
End Sub
ich nicht herausfinden können, warum, wenn ich das Dokument öffnen, wird es einmal funktioniert, aber Sie müssen wieder zu öffnen, ein zweites Mal laufen zu lassen?
Randbemerkung: Wenn Sie Ihre Blätter mit '.Schutz Passwort schützen: =„HSBC2017“, Userinterfaceonly: = true' einmal, dann müssen Sie es nicht für alle Makroaktionen später aufzuheben. Auf diese Weise wird das Blatt nur vor Benutzeraktionen geschützt, aber Makros können trotzdem ausgeführt werden. Siehe [Worksheet.Protect-Methode (Excel)] (http://msdn.microsoft.com/en-us/library/office/ff840611.aspx). –
Ich würde vorschlagen, dass Sie die Kopie unmittelbar vor dem Einfügen tun: 'Sheets (" Tracker "). Zeilen (TrackerRow). EntireRow.Copy' direkt vor '.Cells (compRow + 1, 1) .PasteSpecial xlPasteValues' – Rory
@Rory das würde die kopierte Zeile ändern, da er sie nicht explizit deklariert hat. – Tom