Auto open en libro compartido

Hola amigo, vuelvo a molestarte con el mismo problema que tenía en mi ultima pregunta. Creía que con la función auto_open lo habíamos solucionado, pero hoy cuando lo he probado en el trabajo me he llavado una gran desilusión porque no me funciona y creo que es porque el libro esta compartido. Anoche hice las pruebas en mi casa y me funcionaba porque el libro no estaba compartido, pero hoy cuando he hecho las pruebas con el libro compartido me da el error 1004, error en el método Unprotect de la clase Worksheet. Te se ocurre algo para solucionarlo. Te vuelvo a adjuntar la macro:
Sub Auto_Open()
Sheets("Historico").Select
ActiveSheet.Unprotect "contraseña"
Cells.Select ' selcciona todas las celdas de la hoja
Selection.Locked = True ' las marca como bloqueadas
Selection.FormulaHidden = False
Columns("F:F").Select
Selection.Locked = False ' la marca como desbloqueada (para que me permita buscar por esa columna)
Selection.FormulaHidden = False
ActiveSheet.Protect Password:="contraseña", DrawingObjects:=True, Contents:=True, Scenarios:=True
ActiveSheet.EnableSelection = xlUnlockedCells ' selecciona celdas desbloqueadas
End Sub
Muchas gracias, de nuevo

1 respuesta

Respuesta
1
Ok, graba esos pasos con el grabador de macros y lo incorporas a tú código.
[email protected]
Hola Amigo, se me ha ocurrido que tal vez la solución sea que en la macro de auto_open primero dejemos el libro como exclusivo, luego protejamos la hoja que queremos y volvamos a compartir. No se si será posible, ya que desconozco como puede afectar esto al hecho de que el libro este abierto y se estén introduciendo datos y otro usuario abra el libro y entonces se ejecute el auto open. No se si esto afectara al usuario inicial que estaba utilizando el libro, ya que entiendo que cada vez que se abra el libro por un usuario se ejecutara la macro de auto_open. Bueno como ves, todo son suposiciones, ya me dirás como lo ves... Gracias.
Pensé que no me saldría nunca... después de un par de horas, creo que lo tengo. Mañana lo comprobaré mejor cuando lo comparta en le trabajo. Te quiero adjuntar el código con la esperanza que le eches un vistazo, a ver como lo ves... o si hay alguna instrucción que se podría mejorar. Me interesa que el código sea un muro infranqueable y agradezco tus consejos al respecto. Me da miedo la forma en como lo he hecho, utilizando la herramienta básica de la informática: copiar y pegar.
Sub Auto_Open()
'quitamos alertas
Application.DisplayAlerts = False
'evaluamos si el libro esta compartido
If ActiveWorkbook.MultiUserEditing Then
'si esta compartido, lo ponemos en modo exclusivo 
ActiveWorkbook.ExclusiveAccess
'aqui pongo mis instruciiones de desprotegr y volvr a proteger hoja 4
Sheets("Hoja 4").Select
ActiveSheet.Unprotect "contraseña"
Cells.Select ' selcciona todas las celdas de la hoja
Selection.Locked = True ' las marca como bloqueadas
Selection.FormulaHidden = False
Range("F:F").Select ' selecciona el rango de celdas que desees dejar DESbloqueadas
Selection.Locked = False ' DESbloquea las celdas seleccionadas
Selection.FormulaHidden = False
ActiveSheet.Protect Password:="contraseña", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells ' selecciona celdas desbloqueadas
'guardamos el libro nuevamente como compartido
ActiveWorkbook.SaveAs Filename:=ActiveWorkbook.FullName, _
accessMode:=xlShared
End If
'activamos alertas
Application.DisplayAlerts = True
End Sub
Te agradezco mucho le eches un vistazo a ver si falta alguna cosa o se puede mejorar. Gracias por todo.
Parece que todo está bien. Me cuentas cómo te fue.
[email protected]
Hola amigo, la cosa se me esta complicando hasta limites insospechados. Primero he de decirte que he cambiado la macro, ya que la que te indique solo se ejecuta el proceso de desproteger y proteger si el libro estaba compartido. Por esto he cambiado la macro por otra que creo que es más segura ya que se ejecuta este o no compartido. Te la adjunto para que me digas que te parece y debajo te explico el gran problema que tengo
Sub Auto_Open()
If ActiveWorkbook.MultiUserEditing Then
Status = 1
nbrelibro = ActiveWorkbook.Name
Application.DisplayAlerts = False
ActiveWorkbook.ExclusiveAccess
End If
'aqui pongo mis instruciiones de desacer filtro, volver a hacer y bloquear celdas menos F
Sheets("Hoja4").Select
ActiveSheet.Unprotect "contraseña"
Cells.Select ' selcciona todas las celdas de la hoja
Selection.Locked = True ' las marca como bloqueadas
Selection.FormulaHidden = False
Range("F:F").Select ' selecciona el rango de celdas que desees dejar DESbloqueadas
Selection.Locked = False ' DESbloquea las celdas seleccionadas
Selection.FormulaHidden = False
ActiveSheet.Protect Password:="contraseña", DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowFiltering:=True
ActiveSheet.EnableSelection = xlUnlockedCells ' selecciona celdas desbloqueadas
' me coloco en hoja1
Sheets("Hoja1").Select
'si el libro estuvo compartido se lo vuelve a ese estado y sino se guarda
If Status = 1 Then
With ActiveWorkbook
.KeepChangeHistory = True
.ChangeHistoryDuration = 3 'dias que se guarda el historial
End With
' con las 2 lineas de abajo es como se indica que se comparte el libro
ActiveWorkbook.SaveAs Filename:= _
nbrelibro, accessMode:=xlShared
End If
'activamos alertas
Application.DisplayAlerts = True
End Sub
El problemón es el siguiente:
1.- El primer usuario que abre el libro se ejecuta auto_open correctamente y se vuelve a dejar el libro compartido
2.- El segundo usuario que abre el libro, se ejecuta auto open, pero el libro ya no lo deja compartido. No obstante permite añadir cambios y grabar el libro (si el usuario 1 escribe en la misma celda que suario 2, la próxima vez que abirmos libro se verán los últimos datos gravados sin ningún aviso)
3.- El tercer usuario que abre el libro, se abre como solo lectura y avisa de que esta abierto por usuario 2 para modificar
4.- Si los tres usuarios cierran el libro, la próxima vez que se abre, lo hace en modo exclusivo
Como ves ando bastante perdido y francamente no se que más probar, llevo todo el día y se me han acabado las ideas. Puedes ayudarme una vez más... Gracias.
Trata de poner las condiciones de protección en el evento de libro antes de cerrar, por ejemplo:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    TuCodigo_de_Protección_del_Libro
End Sub
[email protected]
Hola amigo, no me ha funcionado, yo sigo con el tema aver si soy capaz de solucionarlo, si te se ocurre algo te agradezco me avises. Dejaré la pregunta activa por si consigo solucionarla, avisarte. Gracias
Ok, me avisas.
[email protected]
Hola amigo, ne he solucionado el problema pero he avanzado, te explico:
He solucionado el problema que tenia que cuando se volvía a abrir el libro se podían seleccionar las celdas bloqueadas en la hoja 4 la cual estaba protegida. Esto pasaba por un error de excel 2007. He gravado el libro en excel 2003 y funciona bien. Me he instalado el service pack office2007 y se ha solucionado el problema, ahora al abrir el libro en excel 2007 ya no se pueden seleccionar las celdas bloqueadas. Hasta aquí perfecto, tengo la mitad del problema resuelto
El problema que se me plantea es que mediante una macro pego filas de la hoja 3 a la hoja 4 y en este proceso necesito poder pegar datos en columnas bloqueadas. Pero no se como hacer esto porque el libro esta compartido y no puedo ponerlo en exclusivo para desproteger y volver a proteger y compartir, ya que afecto al resto de usuarios que están trabajando.
Gracias por tu ayuda
Recuerda que estás trabajando con Excel y no con un manejador de Bases de Datos, mejor desprotege el Libro, haces tu trabajo y lo proteges nuevamente. No confundamos conceptos.
Una cosa es Excel y otra un manejador de Base de Datos. Con Excel se pueden hacer muchas cosas menos milagros. Aún con los manejadores de Bases de Datos se tiene que tomar la tabla temporalmente para actualizarla.
[email protected]
Ok, gracias por tu ayuda. Ya he solucionado el problema, he tenido que rebajar mis expectativas pero se puede decir que lo tengo solucionado. Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas