Este es el código para la hoja productos.
Ya funciona para que den click en el producto (clo B) y no en la clave (col A), de esta manera la clave, queda protegida.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Act.Por.Dante Amor
'End
If Intersect(Target, Columns("B")) Is Nothing Then Exit Sub
If Target.Count > 1 Then Exit Sub
If Target.Row < 5 Then Exit Sub
cantidad = InputBox("Si estás seguro, captura la cantidad:", "Seleccionaste: " & Range("B" & Target.Row))
If cantidad = 0 Or cantidad = "" Then Exit Sub
Application.ScreenUpdating = False
existe = False
'
Set h2 = Sheets("NUEVO SERVICIO A DOMICILIO")
For I = 18 To 24
If h2.Cells(I, "F") = "" Then
existe = True
Exit For
End If
Next
If existe = False Then
MsgBox "Ya no hay filas para ingresar productos.", vbCritical, "ERROR"
Exit Sub
End If
'desprotejo
h2.Unprotect "28021990"
h2.Cells(I, "G") = Cells(Target.Row, "B") 'producto
h2.Cells(I, "L") = Cells(Target.Row, "C") 'precio
h2.Cells(I, "F") = cantidad
h2.Protect "28021990"
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "B2" Then
Application.ScreenUpdating = False
ActiveSheet.Unprotect "28021990"
If ActiveSheet.FilterMode Then ShowAllData
Application.EnableEvents = False
Target.Value = "*" & Target.Value & "*"
Application.EnableEvents = True
'si existe algun error de uso lo ignora o salta al siguiente error
On Error Resume Next
'BD dinamica lista para efectuar el filtro avanzado en el mismo lugar, desde B1 hasta D2
u = Range("B" & Rows.Count).End(xlUp).Row
Range("B4:E" & u). AdvancedFilter 1, Range("B1"). CurrentRegion
'autoajusta toda fila usada
Cells. Rows. AutoFit
'autoajusta toda columna usada
Cells. Columns. AutoFit
'activamos la actualización de la pantalla
Columns("A").Locked = True
Columns("B").Locked = False
Range("B1, B4").Locked = True
ActiveSheet.Protect "28021990"
Application.ScreenUpdating = True
End If
End Sub