基本的に選択された行を別のシートにコピーし、最初の行から削除する短いコードがあります。2回目の実行時にVBA xlPasteValuesが失敗する
これを実行すると何らかの理由で正常に実行されますが、別の行を選択するとpasteSpecial method of RangeClass failed
エラーが発生します。
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
私はドキュメントを開いたときに一度は機能しますが、もう一度開くには再度開く必要があります。
サイドノート:あなたは '.PROTECTパスワードを使用して、シートを保護する場合:=「HSBC2017」、UserInterfaceOnly:= true'を一度、あなたは後で任意のマクロアクションのためにそれの保護を解除する必要はありません。このようにして、シートはユーザーアクションからのみ保護されますが、マクロは引き続き実行できます。 [Worksheet.Protectメソッド(Excel)](http://msdn.microsoft.com/en-us/library/office/ff840611.aspx)を参照してください。 –
貼り付け直前にコピーをすることをお勧めします: 'Sheets(" Tracker ")。行(trackerRow).EntireRow.Copy'を' .Cells(compRow + 1,1).PasteSpecial xlPasteValues'の直前に置く。 – Rory
@Roryそれは明示的に宣言していないのでコピーされた行を変更します – Tom