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.
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 de Elsa Matilde
1
