So the current spreadsheet I have, there is a script which, when the cell in column J is "Yes", will unprotect the sheet, unhide a column, select the current row, copy it, paste as values, hide the row and protect the sheet.
Here is the code for reference.
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("J5:J1999")) Is Nothing Then Exit Sub
If Target.Value = "Yes" Then
ans = MsgBox("Is this entry completed, and are all details correct?", vbYesNo, "Are you sure?")
If ans = vbNo Then Target.ClearContents
End If
If ans = vbYes Then
'Do Code
ActiveSheet.Unprotect Password:=""
Application.EnableEvents = False
Columns("A:A").Select
Selection.EntireColumn.Hidden = False
Rows(Target.Row).Select
Rows(Target.Row).Copy
Rows(Target.Row).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Columns("A:A").Select
Selection.EntireColumn.Hidden = True
Application.EnableEvents = True
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True, Password:=""
End If
End Sub
The problem is, if the sheet is filtered, the code will not work. It gives me
Run-time error '1004':
The information cannot be pasted because the Copy area and the paste area are not the same size and shape. Try one of the following:
* Click a single cell, and then paste.
* Select a rectangle that's the same size and shape, and then paste.
I have inserted an ActiveSheet.ShowAllData and that works as a bandaid solution, however to make the code run more efficiently (and no need to re-filter), I was wondering whether anyone could tell me how to change the code so that it selects individual cells in the target row, instead of the whole row. The whole row doesn't need to be copy-pasted as values.
Bookmarks