Proteger hojas

Hola
Tengo un fichero Excel con varias hojas. La primera hoja es una hoja indice. Desde esta hoja con un botón puedo realizar una búsqueda en todas la hojas del fichero. Cuando encuentra lo que se busca se posiciona sobre la celda la marca en rojo y pregunta si es el resultado buscado o no. Si se le dice que siga buscando continua la búsqueda en la misma hoja y luego pasa a la siguiente. Si se encuentra lo que se busca se le dice que no y se queda en dicha hoja, caso de no encontrar nada vuelve a la hoja INDICE.
Se haga lo que se haga una vez finalizada la búsqueda las celdas se quedan como estaban al principio.
Como el fichero lo van a utilizar más personas, necesito proteger las hojas para que no realicen cambios. El problema es que si protejo las hojas no puede marcar en rojo la celda encontrada. He puesto una macro que protege todas las hojas al abrir el libro y he conseguido que cuando realiza la búsqueda, desproteja la hoja donde encuentra una celda, de manera que la marca en rojo, pero no consigo que una vez finalizada la búsqueda en una hoja y dejando la celda en su estado original, vuelva a proteger la hoja antes de pasar a la siguiente (si tiene que continuar buscando), o la proteja y se quede en la hoja si no tiene que seguir buscando.
El código es este:
Private Sub CommandButton1_Click()
Dim buscar
Dim texto As String, titulo As String
Dim color As Integer
texto = "Introduzca su busqueda"
titulo = "Busqueda en todas las hojas del libro"
buscar = InputBox(texto, titulo)
If buscar = "" Then Exit Sub
For Each hoja In Sheets
If hoja.Name <> "INDICE" Then
With hoja.Range("A2:AA65500")
hoja.Activate
Set esta = .Find(buscar, LookIn:=xlValues, lookat:=xlWhole)
If Not esta Is Nothing Then
primeracelda = esta.Address
Do
esta.Select
color = esta.Interior.ColorIndex
hoja.Unprotect "123"
esta.Interior.ColorIndex = 3
sino = MsgBox("Estás en hoja " & hoja.Name & " ¿Deseas continuar la búsqueda?", vbYesNo)
If sino <> vbYes Then ActiveCell.Interior.ColorIndex = color: Exit Sub
Set esta = .FindNext(esta)
ActiveCell.Interior.ColorIndex = color
Loop While Not esta Is Nothing And esta.Address <> primeracelda
End If
End With
End If
Next hoja
Sheets("INDICE").Select
End Sub
No se si esta claro.
Muchas gracias por todo.

1 respuesta

Respuesta
1
TE dejo marcado donde, a simple vista, tenés que colocar la instrucción de protección.
Pruébala y comentame si alcanza o requiere de alguna otra protección:
Private Sub CommandButton1_Click()
Dim buscar
Dim texto As String, titulo As String
Dim color As Integer
texto = "Introduzca su busqueda"
titulo = "Busqueda en todas las hojas del libro"
buscar = InputBox(texto, titulo)
If buscar = "" Then Exit Sub
For Each hoja In Sheets
If hoja.Name <> "INDICE" Then
With hoja.Range("A2:AA65500")
hoja.Activate
Set esta = .Find(buscar, LookIn:=xlValues, lookat:=xlWhole)
If Not esta Is Nothing Then
primeracelda = esta.Address
Do
esta.Select
color = esta.Interior.ColorIndex
hoja.Unprotect "123"
esta.Interior.ColorIndex = 3
sino = MsgBox("Estás en hoja " & hoja.Name & " ¿Deseas continuar la búsqueda?", vbYesNo)
If sino <> vbYes Then ActiveCell.Interior.ColorIndex = color: hoja.protect "123": Exit Sub
Set esta = .FindNext(esta)
ActiveCell.Interior.ColorIndex = color
hoja.protect "123"
Loop While Not esta Is Nothing And esta.Address <> primeracelda
End If
End With
End If
Next hoja
Sheets("INDICE").Select
End Sub
Otra opción es desproteger al inicio, sin tener en cuenta si se encuentra o no, y se vuelve a proteger antes del next
For Each hoja In Sheets
If hoja.Name <> "INDICE" Then
Hoja. Unprotect "123"
y justo por encima del Next hoja la protegés. Si vas a utilizar esta opción no necesitas las que quedaron marcadas en el ejemplo anterior, salvo la que dejé en cursiva que sí se requiere antes del exit.
Ya pasó 1 semana desde que te envié respuesta a tu consulta. Podes solicitar aclaraciones si aún queda algo sin resolver.
Pero si el tema ha quedado resuelto, por favor finaliza la consulta.
Siento la tardanza, pero acabo de regresar de vacaciones y no he tenido acceso a Internet.
Me pongo a ello y enseguida te contesto.
Gracias por todo.
Si, comprendo, tomate el tiempo, pero no la olvides ;)
Sdos
Elsa
Elsa, muchas gracias por tu paciencia.
He probado, y va perfecto. Al abrir el libro todas las hojas están protegidas, (con lo cual evito que modifiquen datos). Con tus aclaraciones se consigue exactamente lo que quiero, que busque y señale y una vez finalizado vuelva a proteger la hoja.
Muchísimas gracias por tú respuesta y por tu paciencia.
Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas