problemas con el "unprotect"

23/07/2008 - 13:38 por jose riu | Informe spam
tengo un inconveniente con el "unprotect" que hace rato me esta trayendo
problemas.
si desprotejo la hoja, e inmediatamente quiero hacer un copy/paste, me da
error en el "paste", sin importar de que tipo sea.
si desprotejo la hoja, y ejecuta la misma macro, no tengo ningun
inconveniente.
tambien funciona sin problemas, sin desprotejo varias hojas al mismo tiempo
, y luego empiezo a trabjar con la 1ª desprotegida.
De modo que pareciera ser un problema en el tiempo de respuesta del excel
al desproteger la hoja.
como si el hecho de querer usarla inmediatamente no fuera posible, hasta que
transcurra un cierto tiempo.
si alguien sabe a que se debe, o me puede dar una solucion diferente a
interponer entre ambas instrucciones cualquier delay, se lo agradeceria.

saludos, y gracias de antemano
Jose Riu
Buenos Aires
Argentina

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/07/2008 - 23:14 | Informe spam
hola, jose !

tengo un inconveniente con el "unprotect" que hace rato me esta trayendo problemas.
si desprotejo la hoja, e inmediatamente quiero hacer un copy/paste, me da error en el "paste", sin importar de que tipo sea.
si desprotejo la hoja, y ejecuta la misma macro, no tengo ningun inconveniente.
tambien funciona sin problemas, sin desprotejo varias hojas al mismo tiempo y luego empiezo a trabjar con la 1ª desprotegida.
De modo que pareciera ser un problema en el tiempo de respuesta del excel al desproteger la hoja.
como si el hecho de querer usarla inmediatamente no fuera posible, hasta que transcurra un cierto tiempo.
si alguien sabe a que se debe, o me puede dar una solucion diferente a interponer entre ambas instrucciones cualquier delay ...



no creo que necesites de un "delay" para operar sobre hojas (des/re)protegidas por medio de macros -?-
es probable que "otros eventos" fueran la causa de alguna (re)proteccion "inesperada" ?
(seria necesario que revises o expogas las lineas de codigo con las que des/re/proteges tus hojas)

de cualquier forma, lo mas "usual" para trabajar con macros sobre hojas protegidas es re/proteger en el evento '_open' del libro
estableciendo la proteccion a solo la interfase con el usuario
segun las versiones a las que tengas pensado dar "soporte" para el uso de tu archivo +/- como sigue:
=a) en excel 97 y 2000 NO necesitas repetir el password (es suficiente con poner):
Private Sub Workbook_Open()
Worksheets("Hoja1").Protect UserInterfaceOnly:=True
End Sub
=b) a partir de excel 2002/xp SI es requisito repetir el password:
Private Sub Workbook_Open()
Worksheets("Hoja1").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub
=c) si se trata de varias hojas (suponiendo una misma clave para todas)...
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets(Array("hoja1", "hoja4", "hoja6"))
Hoja.Protect PassWord:="123", UserInterfaceOnly:=True
Next
End Sub
=(practicamente) TODO lo que hagas por codigo... pasara sin problemas
(excepto ciertas cosillas relacionadas con ordenaciones, insertar filas/columnas y objetos incrustados)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#2 jose riu
24/07/2008 - 13:03 | Informe spam
Hector, ante todo muchisimas gracias por el tiempo que dedicas a ayudar a
todo el mundo con los problemas que nos pudieran surgir con excel a los que
no sabemos tanto aun!.

Te transcribo el codigo para que entiendas un poco mas mi problema y/o
descubras que puedo estar haciendo mal

Sub alta_proveedor()
'
' alta_proveedor Macro
' Macro grabada el 22/07/2008 por Señores Usuarios
'

'
Range(Cells(4, 20)).Select
Selection.Copy
Sheets("Saldos").Select
ActiveSheet.Unprotect Password:="cala"
Range(Cells(3, 7)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
Sheets("Facturas").Select
Application.CutCopyMode = False
Range(Cells(3, 20)).Select
End Sub

la linea donde me da error es :

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False

esto no ocurre si la pagina se encuentra desprotegida previamente a la
ejecucion de la macro.
por eso es que deduzco que puede existir algun tipo de tiempo de respuesta
de la instruccion unprotect previa al paste.
quiero añadir que esto mismo me pasaba en otros lbros que desarrolle tiempo
atras, optando en ese momento por dejarlo desprotegido.
por el momento la unica solucion que encontre, y que funciona, es proteger
la hoja con useinterfaceonly y ejecutar la macro sin desproteger; quedando
asi.

Sub alta_proveedor()
'
' alta_proveedor Macro
' Macro grabada el 22/07/2008 por Señores Usuarios
'

'
Range(Cells(4, 20)).Select
Selection.Copy
Sheets("Saldos").Select
' ActiveSheet.Unprotect Password:="cala"
Range(Cells(3, 7)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
' ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
Sheets("Facturas").Select
Application.CutCopyMode = False
Range(Cells(3, 20)).Select
End Sub

por lo cual, al momento la cnsulta ya no es para resolver el problema, sino
para aprender y saber porque sucedio eso.

saludos, y reitero mi total agradecimiento por tu ayuda.

Jose Riu

pd: expuse otra pregunta referia a la lentitud del libro, si podes y tenes
tiempo, me gustaria conocer tu opinion.

Jose Riu
Buenos Aires
Argentina


"Héctor Miguel" escribió:

hola, jose !

> tengo un inconveniente con el "unprotect" que hace rato me esta trayendo problemas.
> si desprotejo la hoja, e inmediatamente quiero hacer un copy/paste, me da error en el "paste", sin importar de que tipo sea.
> si desprotejo la hoja, y ejecuta la misma macro, no tengo ningun inconveniente.
> tambien funciona sin problemas, sin desprotejo varias hojas al mismo tiempo y luego empiezo a trabjar con la 1ª desprotegida.
> De modo que pareciera ser un problema en el tiempo de respuesta del excel al desproteger la hoja.
> como si el hecho de querer usarla inmediatamente no fuera posible, hasta que transcurra un cierto tiempo.
> si alguien sabe a que se debe, o me puede dar una solucion diferente a interponer entre ambas instrucciones cualquier delay ...

no creo que necesites de un "delay" para operar sobre hojas (des/re)protegidas por medio de macros -?-
es probable que "otros eventos" fueran la causa de alguna (re)proteccion "inesperada" ?
(seria necesario que revises o expogas las lineas de codigo con las que des/re/proteges tus hojas)

de cualquier forma, lo mas "usual" para trabajar con macros sobre hojas protegidas es re/proteger en el evento '_open' del libro
estableciendo la proteccion a solo la interfase con el usuario
segun las versiones a las que tengas pensado dar "soporte" para el uso de tu archivo +/- como sigue:
=> a) en excel 97 y 2000 NO necesitas repetir el password (es suficiente con poner):
Private Sub Workbook_Open()
Worksheets("Hoja1").Protect UserInterfaceOnly:=True
End Sub
=> b) a partir de excel 2002/xp SI es requisito repetir el password:
Private Sub Workbook_Open()
Worksheets("Hoja1").Protect _
PassWord:="la MISMA cOntRaSe#a qUe lE pUsISte", _
UserInterfaceOnly:=True
End Sub
=> c) si se trata de varias hojas (suponiendo una misma clave para todas)...
Private Sub Workbook_Open()
Dim Hoja As Worksheet
For Each Hoja In Worksheets(Array("hoja1", "hoja4", "hoja6"))
Hoja.Protect PassWord:="123", UserInterfaceOnly:=True
Next
End Sub
=> (practicamente) TODO lo que hagas por codigo... pasara sin problemas
(excepto ciertas cosillas relacionadas con ordenaciones, insertar filas/columnas y objetos incrustados)

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.



Respuesta Responder a este mensaje
#3 Héctor Miguel
24/07/2008 - 19:58 | Informe spam
hola, jose !

Te transcribo el codigo para que entiendas un poco mas mi problema y/o descubras que puedo estar haciendo mal



el "delay" que piensas podria ser necesario (y que no hay tal) se debe a la siguiente "secuencia de eventos":

1) primero haces un copy (Selection.Copy)
2) despues seleccionas la hoja protegida y la desproteges (ActiveSheet.Unprotect Password:="cala")
3) justo con esta accion, queda vacio el "portapapeles" (ya no hay nada "que pegar")
y se ocasiona la falla en el metodo ".PasteSpecial" (etc. etc. etc.)
4) solucion: desproteger PRIMERO, y luego hacer el "copy" para poder hacer el "paste"... y VOLVER A PROTEGER
(p.e.) entendido que la hoja protegida es "Saldos"
e incluso si "danzar" haciendo "Select" entre hojas y rangos...

Sub Pasar_dato_en_hoja_protegida_2()
Worksheets("saldos").Unprotect "cala"
Worksheets("facturas").Range("t4").Copy
Worksheets("saldos").Range("g7").PasteSpecial xlPasteValues
Worksheets("saldos").Protect "cala", 1, 1, 1, 1
End Sub

aunque si vas a estar des/re/protegiendo, no tiene sentido usar el "UserInterfaceOnly" -?-

por otro lado, si solo vas a pasar "valores" de una celda conocida a otra tambien conocida
y esta ultima esta en la hoja protegida con el "UserInterfaceOnly" establecido en True...
solo necesitas una linea +/- como sigue:

Sub Pasar_dato_en_hoja_protegida()
Worksheets("saldos").Range("g7") = Worksheets("facturas").Range("t4")
End Sub

saludos,
hector.

__ el codigo expuesto __
Sub alta_proveedor()
Range(Cells(4, 20)).Select
Selection.Copy
Sheets("Saldos").Select
ActiveSheet.Unprotect Password:="cala"
Range(Cells(3, 7)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
Sheets("Facturas").Select
Application.CutCopyMode = False
Range(Cells(3, 20)).Select
End Sub

la linea donde me da error es :
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

esto no ocurre si la pagina se encuentra desprotegida previamente a la ejecucion de la macro.
por eso es que deduzco que puede existir algun tipo de tiempo de respuesta de la instruccion unprotect previa al paste.
quiero anadir que esto mismo me pasaba en otros lbros que desarrolle tiempo atras, optando en ese momento por dejarlo desprotegido.
por el momento la unica solucion que encontre, y que funciona, es proteger la hoja con useinterfaceonly
y ejecutar la macro sin desproteger quedando asi.

Sub alta_proveedor()
Range(Cells(4, 20)).Select
Selection.Copy
Sheets("Saldos").Select
' ActiveSheet.Unprotect Password:="cala"
Range(Cells(3, 7)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
' ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
Sheets("Facturas").Select
Application.CutCopyMode = False
Range(Cells(3, 20)).Select
End Sub

por lo cual, al momento la cnsulta ya no es para resolver el problema, sino para aprender y saber porque sucedio eso.

saludos, y reitero mi total agradecimiento por tu ayuda.

Jose Riu

pd: expuse otra pregunta referia a la lentitud del libro, si podes y tenes tiempo, me gustaria conocer tu opinion.
Jose Riu
Buenos Aires
Argentina
Respuesta Responder a este mensaje
#4 jose riu
25/07/2008 - 14:00 | Informe spam
excelente!
no sabia que al desproteger una hoja se vaciaba el portapales.
muchisimas gracias, y hasta la proxima.
Jose Riu
Buenos Aires
Argentina


"Héctor Miguel" escribió:

hola, jose !

> Te transcribo el codigo para que entiendas un poco mas mi problema y/o descubras que puedo estar haciendo mal

el "delay" que piensas podria ser necesario (y que no hay tal) se debe a la siguiente "secuencia de eventos":

1) primero haces un copy (Selection.Copy)
2) despues seleccionas la hoja protegida y la desproteges (ActiveSheet.Unprotect Password:="cala")
3) justo con esta accion, queda vacio el "portapapeles" (ya no hay nada "que pegar")
y se ocasiona la falla en el metodo ".PasteSpecial" (etc. etc. etc.)
4) solucion: desproteger PRIMERO, y luego hacer el "copy" para poder hacer el "paste"... y VOLVER A PROTEGER
(p.e.) entendido que la hoja protegida es "Saldos"
e incluso si "danzar" haciendo "Select" entre hojas y rangos...

Sub Pasar_dato_en_hoja_protegida_2()
Worksheets("saldos").Unprotect "cala"
Worksheets("facturas").Range("t4").Copy
Worksheets("saldos").Range("g7").PasteSpecial xlPasteValues
Worksheets("saldos").Protect "cala", 1, 1, 1, 1
End Sub

aunque si vas a estar des/re/protegiendo, no tiene sentido usar el "UserInterfaceOnly" -?-

por otro lado, si solo vas a pasar "valores" de una celda conocida a otra tambien conocida
y esta ultima esta en la hoja protegida con el "UserInterfaceOnly" establecido en True...
solo necesitas una linea +/- como sigue:

Sub Pasar_dato_en_hoja_protegida()
Worksheets("saldos").Range("g7") = Worksheets("facturas").Range("t4")
End Sub

saludos,
hector.

__ el codigo expuesto __
> Sub alta_proveedor()
> Range(Cells(4, 20)).Select
> Selection.Copy
> Sheets("Saldos").Select
> ActiveSheet.Unprotect Password:="cala"
> Range(Cells(3, 7)).Select
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
> :=False, Transpose:=False
> ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
> Sheets("Facturas").Select
> Application.CutCopyMode = False
> Range(Cells(3, 20)).Select
> End Sub
>
> la linea donde me da error es :
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
> :=False, Transpose:=False
>
> esto no ocurre si la pagina se encuentra desprotegida previamente a la ejecucion de la macro.
> por eso es que deduzco que puede existir algun tipo de tiempo de respuesta de la instruccion unprotect previa al paste.
> quiero anadir que esto mismo me pasaba en otros lbros que desarrolle tiempo atras, optando en ese momento por dejarlo desprotegido.
> por el momento la unica solucion que encontre, y que funciona, es proteger la hoja con useinterfaceonly
> y ejecutar la macro sin desproteger quedando asi.
>
> Sub alta_proveedor()
> Range(Cells(4, 20)).Select
> Selection.Copy
> Sheets("Saldos").Select
> ' ActiveSheet.Unprotect Password:="cala"
> Range(Cells(3, 7)).Select
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
> :=False, Transpose:=False
> ' ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
> Sheets("Facturas").Select
> Application.CutCopyMode = False
> Range(Cells(3, 20)).Select
> End Sub
>
> por lo cual, al momento la cnsulta ya no es para resolver el problema, sino para aprender y saber porque sucedio eso.
>
> saludos, y reitero mi total agradecimiento por tu ayuda.
>
> Jose Riu
>
> pd: expuse otra pregunta referia a la lentitud del libro, si podes y tenes tiempo, me gustaria conocer tu opinion.
> Jose Riu
> Buenos Aires
> Argentina



Respuesta Responder a este mensaje
#5 jose riu
25/07/2008 - 15:04 | Informe spam
consulta:

Porque puede ser que este codigo no funcione :

Worksheets("totales propios").Range(Cells(3, 7)) =
Worksheets("propios").Range(Cells(4, 14))

si verifico que en las celdas de donde toma el range, tiene la direccion
origen y destino correspondientemente?

sin embargo , con el codigo com oestaba antes , funciona :

Range(Cells(4, 14)).Select
Selection.Copy
Sheets("Totales Propios").Select
Range(Cells(3, 7)).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks _
:=False, Transpose:=False
Sheets("propios").Select

saludos
Jose Riu
Buenos Aires
Argentina


"Héctor Miguel" escribió:

hola, jose !

> Te transcribo el codigo para que entiendas un poco mas mi problema y/o descubras que puedo estar haciendo mal

el "delay" que piensas podria ser necesario (y que no hay tal) se debe a la siguiente "secuencia de eventos":

1) primero haces un copy (Selection.Copy)
2) despues seleccionas la hoja protegida y la desproteges (ActiveSheet.Unprotect Password:="cala")
3) justo con esta accion, queda vacio el "portapapeles" (ya no hay nada "que pegar")
y se ocasiona la falla en el metodo ".PasteSpecial" (etc. etc. etc.)
4) solucion: desproteger PRIMERO, y luego hacer el "copy" para poder hacer el "paste"... y VOLVER A PROTEGER
(p.e.) entendido que la hoja protegida es "Saldos"
e incluso si "danzar" haciendo "Select" entre hojas y rangos...

Sub Pasar_dato_en_hoja_protegida_2()
Worksheets("saldos").Unprotect "cala"
Worksheets("facturas").Range("t4").Copy
Worksheets("saldos").Range("g7").PasteSpecial xlPasteValues
Worksheets("saldos").Protect "cala", 1, 1, 1, 1
End Sub

aunque si vas a estar des/re/protegiendo, no tiene sentido usar el "UserInterfaceOnly" -?-

por otro lado, si solo vas a pasar "valores" de una celda conocida a otra tambien conocida
y esta ultima esta en la hoja protegida con el "UserInterfaceOnly" establecido en True...
solo necesitas una linea +/- como sigue:

Sub Pasar_dato_en_hoja_protegida()
Worksheets("saldos").Range("g7") = Worksheets("facturas").Range("t4")
End Sub

saludos,
hector.

__ el codigo expuesto __
> Sub alta_proveedor()
> Range(Cells(4, 20)).Select
> Selection.Copy
> Sheets("Saldos").Select
> ActiveSheet.Unprotect Password:="cala"
> Range(Cells(3, 7)).Select
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
> :=False, Transpose:=False
> ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
> Sheets("Facturas").Select
> Application.CutCopyMode = False
> Range(Cells(3, 20)).Select
> End Sub
>
> la linea donde me da error es :
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
> :=False, Transpose:=False
>
> esto no ocurre si la pagina se encuentra desprotegida previamente a la ejecucion de la macro.
> por eso es que deduzco que puede existir algun tipo de tiempo de respuesta de la instruccion unprotect previa al paste.
> quiero anadir que esto mismo me pasaba en otros lbros que desarrolle tiempo atras, optando en ese momento por dejarlo desprotegido.
> por el momento la unica solucion que encontre, y que funciona, es proteger la hoja con useinterfaceonly
> y ejecutar la macro sin desproteger quedando asi.
>
> Sub alta_proveedor()
> Range(Cells(4, 20)).Select
> Selection.Copy
> Sheets("Saldos").Select
> ' ActiveSheet.Unprotect Password:="cala"
> Range(Cells(3, 7)).Select
> Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
> :=False, Transpose:=False
> ' ActiveSheet.Protect Password:="cala", UserInterfaceOnly:=True
> Sheets("Facturas").Select
> Application.CutCopyMode = False
> Range(Cells(3, 20)).Select
> End Sub
>
> por lo cual, al momento la cnsulta ya no es para resolver el problema, sino para aprender y saber porque sucedio eso.
>
> saludos, y reitero mi total agradecimiento por tu ayuda.
>
> Jose Riu
>
> pd: expuse otra pregunta referia a la lentitud del libro, si podes y tenes tiempo, me gustaria conocer tu opinion.
> Jose Riu
> Buenos Aires
> Argentina



Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida