Vamos a ello. Abre el proyecto y crea un módulo donde pegarás el código que te escribo:
Option Explicit
Function comprobar_cod(cod As Variant, ByRef i As Integer, ByRef r As Integer) As Boolean
'Importante!
'cambia la letra de la columna de los códigos por la real
'la fila es irrelevante por lo que elige la primera que contenga código
Const codes = "A1"
Dim c As Integer
'me posiciono en la primera celda donde empiezan los códigos
Range(codes).Select
r = ActiveCell.Row
c = ActiveCell.Column
i = 0
Do While Cells(r + i, c).Value <> cod And Cells(r + i, c).Value <> "" i
= i + 1
Loop
If Cells(r + i, c).Value = cod Then
comprobar_cod = True
Else: comprobar_cod = False
End If
End Function
Sub B_ESTADO_click()
On Error Resume Next
'Importante!
'cambia la letra de la columna estado por la real
'la fila es irrelevante por lo que elige la primera que contenga datos
Const status = "B1"
'tipo de estado
'modifica esta constante si en un futuro quieres cambiar el nombre
Const nom_estado = "Solucionado"
'Variables para el proceso
Dim cod As Variant
Dim dato As String, comentario As String
Dim i As Integer, r As Integer, c As Integer
Application.ScreenUpdating = False
código:
cod = Application.InputBox("Introduzca número de código (Cancelar para salir)")
If cod = False Then
Exit Sub
ElseIf cod = "" Then
MsgBox "No ha introducido ningún código. Vuelva a intentarlo.", vbOKOnly + vbExclamation
GoTo código
Else:
cod = CDbl(cod)
If comprobar_cod(cod, i, r) = False Then
MsgBox "No existe el código " & cod & " en el registro. Imposible continuar.", vbOKOnly + vbExclamation
Exit Sub
End If
End If
'modifico el dato estado
c = Range(status).Column
dato = Cells(r + i, c).Value
Cells(r + i, c).Value = nom_estado
'añado el comentario al estado
comentario = Now
Cells(r + i, c).Comment.Delete
Cells(r + i, c).AddComment comentario
MsgBox "Se ha modificado el estado del código " & cod & " del estado " & dato & vbCrLf & _
" al estado " & nom_estado, vbInformation + vbOKOnly
End Sub
Sub B_ELIMINAR_Click()
On Error Resume Next
'Importante!!!!!!
'cambia la letra de la columna de los códigos por la real
'la fila es irrelevante por lo que elige la primera que contenga código
Const codes = "A1"
Dim cod As Variant
Dim respuesta As String
Dim i As Integer, r As Integer, c As Integer
Application.ScreenUpdating = False
código:
'pregunto por el código a eliminar
cod = Application.InputBox("Introduzca número de código a eliminar (Cancelar para salir)")
If cod = False Then
Exit Sub
ElseIf cod = "" Then
MsgBox "No ha introducido ningún código. Vuelva a intentarlo.", vbOKOnly + vbExclamation
GoTo código
Else:
cod = CDbl(cod)
If comprobar_cod(cod, i, r) = False Then
MsgBox "No existe el código " & cod & " en el registro. Imposible continuar.", vbOKOnly + vbExclamation
Exit Sub
End If
End If
c = Range(codes).Column
Cells(r + i, c).Select
respuesta = MsgBox("¿Está seguro de que quiere eliminar el código " & cod & " de la lista?", _ vbYesNo + vbQuestion)
If respuesta = vbYes Then
'redimensiono la selección y la elimino
Selection.EntireRow.Select
Selection.Delete
Else:
Exit Sub
End If
Range (codes).Select
Application.ScreenUpdating = True
End Sub
Ahora en tu hoja3 create dos botones. Uno para el sub estado y otro para el sub eliminar.