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

#6 Héctor Miguel
25/07/2008 - 21:44 | Informe spam
hola, jose !

no me explico como "haces que funcione" una referencia a rangos usando "la forma" que comentas (me explico)
aunque existen varias "formas" de construir referencias a celdas y rangos...
(hasta donde se) de las diversas formas que puedes utilizar estan las siguientes:

- Range(<direccion textual>)
<direccion textual> utilizando la notacion "A1" p.e. Range("a1")... Range("d3:g5")... Range("a1,c3:d5,g9,h7:m1")...

- Cells(<fila>, <columna>) (creo que aqui sobran los comentarios)

- Range(<nombre_del_rango>) (tambien sin comentarios)

- Range(Cells(<fila>, <columna>), Cells(<fila>, <columna>))
Cells "dentro" de Range requiere usar DOS VECES Cells (celda-Inicial Y celda-Final)
(asi se trate de una sola celda, p.e.) Range(Cells(3, 7), Cells(3, 7))

PERO...
- la que usas: => Range(Cells(<fila>, <columna>)).Select
pregunta: realmente te esta funcionando ???

saludos,
hector.

__ OP __
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 como estaba 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
Respuesta Responder a este mensaje
#7 jose riu
25/07/2008 - 22:15 | Informe spam
hector :

este codigo funciona perfectamente :
Range(Cells(4, 13)).Select
me permite posicionarme en la celda a la que hace referencia la celda (4, 13)

sino ,de que otra forma se puede hacer?

Y de paso :
estoy teniendo problemas para hacer funcionar este codigo :

Sub deposito()
fo = ActiveCell.Row
fd = Worksheets("banco").Cells(4, 9)
With Worksheets("banco")
.Cells(fd, 1) = Range(Cells(2, 9), Cells(2, 9)) ' lo puse asi como
vos me dijiste que era la sintaxis, pero tmb da error
.Cells(fd, 2) = "cheque"
.Cells(fd, 3) = Worksheets("3º").Cells(fo, 4)
.Cells(fd, 4) = Worksheets("3º").Cells(fo, 5)
.Cells(fd, 5) = Worksheets("3º").Cells(fo, 7)
.Cells(fd, 7) = Worksheets("3º").Cells(fo, 6)
End With
End Sub

te aclaro que soy muy nuevo con vba, por lo que algunas cosas que pregunto o
hago pueden parecer sin sentido alguno.

desde ya , te agradezco enormemente tu ayuda.

Jose.
Jose Riu
Buenos Aires
Argentina


"Héctor Miguel" escribió:

hola, jose !

no me explico como "haces que funcione" una referencia a rangos usando "la forma" que comentas (me explico)
aunque existen varias "formas" de construir referencias a celdas y rangos...
(hasta donde se) de las diversas formas que puedes utilizar estan las siguientes:

- Range(<direccion textual>)
<direccion textual> utilizando la notacion "A1" p.e. Range("a1")... Range("d3:g5")... Range("a1,c3:d5,g9,h7:m1")...

- Cells(<fila>, <columna>) (creo que aqui sobran los comentarios)

- Range(<nombre_del_rango>) (tambien sin comentarios)

- Range(Cells(<fila>, <columna>), Cells(<fila>, <columna>))
Cells "dentro" de Range requiere usar DOS VECES Cells (celda-Inicial Y celda-Final)
(asi se trate de una sola celda, p.e.) Range(Cells(3, 7), Cells(3, 7))

PERO...
- la que usas: => Range(Cells(<fila>, <columna>)).Select
pregunta: realmente te esta funcionando ???

saludos,
hector.

__ OP __
> 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 como estaba 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



Respuesta Responder a este mensaje
#8 Héctor Miguel
25/07/2008 - 22:56 | Informe spam
hola, jose !

__ 1 __
este codigo funciona perfectamente: Range(Cells(4, 13)).Select
me permite posicionarme en la celda a la que hace referencia la celda (4, 13)
sino, de que otra forma se puede hacer?



1) si tu Cells(4, 13) (que en realidad es la celda M4) contiene la referencia "a otra celda" (p.e. A1 o C10 o M45 ...)
entonces la instruccion Range(Cells(4, 13)) es igual a la primera forma comentada:
=> Range(<direccion textual>) o... Range("A1") o... Range("C10") o... Range("M45") o... ???

__ 2 __
Y de paso: estoy teniendo problemas para hacer funcionar este codigo :
Sub deposito()
fo = ActiveCell.Row
fd = Worksheets("banco").Cells(4, 9)
With Worksheets("banco")
.Cells(fd, 1) = Range(Cells(2, 9), Cells(2, 9)) ' lo puse asi como vos me dijiste que era la sintaxis, pero tmb da error
.Cells(fd, 2) = "cheque"
.Cells(fd, 3) = Worksheets("3º").Cells(fo, 4)
.Cells(fd, 4) = Worksheets("3º").Cells(fo, 5)
.Cells(fd, 5) = Worksheets("3º").Cells(fo, 7)
.Cells(fd, 7) = Worksheets("3º").Cells(fo, 6)
End With
End Sub



2) aqui podria haber dos o mas situaciones "desconocidas" (para mi)...

a) que contiene tu Cells(2, 9) que en realidad es la celda I9 de la hoja activa -???-

b) de igual forma, la Cells(4, 9) [D9] de la hoja "banco" que es lo que contiene -???-
se supone que debera contener el numero para aplicarse a la variable <fila> de un Cells(<fila>, <columna>)

__ 3 __
te aclaro que soy muy nuevo con vba, por lo que algunas cosas que pregunto o hago pueden parecer sin sentido alguno.



3) todos tenemos un "punto de partida", yo no me preocuparia por lo que pregunto, sino por lo que NO pregunto :))

saludos,
hector.
Respuesta Responder a este mensaje
#9 jose riu
26/07/2008 - 18:29 | Informe spam
hector:
efectivamente lo que quiero hacer con las variables "fo" y"fd", es tener la
"fila origen" y "fila destino" de la info que voy a copiar.
en la celda (4,9), tengo la direccion (variable) de donde quiero que se
grabe la nueva info, que debe tomarla de las diferentes columnas de la fila
origen, que es la celda activa al momento de ejecutar la macro.
el contenido de la celda (2,9) de la hoja "banco" tiene un valor variable
"hoy()", que quiero dejar fijo en la celda de la fila destina, columna 1.
con respecto al punto (1), de tu respuesta, entiendo que la sintaxis termina
siendo la opcion de Range(<direccion textual>), pero en lugar de poder
escribir Range("A1"), debo transferirle la direccion a traves valor de la
celda (4,9), que es variable.
lo que no me queda claro es si al poner Range("A1"), estas haciendo
referencia a la celda A1, o a la direccion contenida en esta.
espero que se entienda, porque probe distintas formas, y no logro dar con la
sintaxis correcta.
como siempre, agradezco muchisimo el tiempo que dedicas a explicarnos y
darnos soluciones.
Jose Riu
Buenos Aires
Argentina


"Héctor Miguel" escribió:

hola, jose !

__ 1 __
> este codigo funciona perfectamente: Range(Cells(4, 13)).Select
> me permite posicionarme en la celda a la que hace referencia la celda (4, 13)
> sino, de que otra forma se puede hacer?

1) si tu Cells(4, 13) (que en realidad es la celda M4) contiene la referencia "a otra celda" (p.e. A1 o C10 o M45 ...)
entonces la instruccion Range(Cells(4, 13)) es igual a la primera forma comentada:
=> Range(<direccion textual>) o... Range("A1") o... Range("C10") o... Range("M45") o... ???

__ 2 __
> Y de paso: estoy teniendo problemas para hacer funcionar este codigo :
> Sub deposito()
> fo = ActiveCell.Row
> fd = Worksheets("banco").Cells(4, 9)
> With Worksheets("banco")
> .Cells(fd, 1) = Range(Cells(2, 9), Cells(2, 9)) ' lo puse asi como vos me dijiste que era la sintaxis, pero tmb da error
> .Cells(fd, 2) = "cheque"
> .Cells(fd, 3) = Worksheets("3º").Cells(fo, 4)
> .Cells(fd, 4) = Worksheets("3º").Cells(fo, 5)
> .Cells(fd, 5) = Worksheets("3º").Cells(fo, 7)
> .Cells(fd, 7) = Worksheets("3º").Cells(fo, 6)
> End With
> End Sub

2) aqui podria haber dos o mas situaciones "desconocidas" (para mi)...

a) que contiene tu Cells(2, 9) que en realidad es la celda I9 de la hoja activa -???-

b) de igual forma, la Cells(4, 9) [D9] de la hoja "banco" que es lo que contiene -???-
se supone que debera contener el numero para aplicarse a la variable <fila> de un Cells(<fila>, <columna>)

__ 3 __
> te aclaro que soy muy nuevo con vba, por lo que algunas cosas que pregunto o hago pueden parecer sin sentido alguno.

3) todos tenemos un "punto de partida", yo no me preocuparia por lo que pregunto, sino por lo que NO pregunto :))

saludos,
hector.



Respuesta Responder a este mensaje
#10 Héctor Miguel
26/07/2008 - 23:43 | Informe spam
hola, jose !

... lo que quiero hacer con las variables "fo" y"fd", es tener la "fila origen" y "fila destino" de la info que voy a copiar.
en la celda (4,9), tengo la direccion (variable) de donde quiero que se grabe la nueva info
que debe tomarla de las diferentes columnas de la fila origen, que es la celda activa al momento de ejecutar la macro.
el contenido de la celda (2,9) de la hoja "banco" tiene un valor variable "hoy()"
que quiero dejar fijo en la celda de la fila destina, columna 1.
con respecto al punto (1), de tu respuesta, entiendo que la sintaxis termina siendo la opcion de Range(<direccion textual>)
pero en lugar de poder escribir Range("A1"), debo transferirle la direccion a traves valor de la celda (4,9), que es variable.
lo que no me queda claro es si al poner Range("A1"), estas haciendo referencia a la celda A1
o a la direccion contenida en esta.espero que se entienda, porque probe distintas formas, y no logro dar con la sintaxis correcta.



nota como obtienes el dato para las variables "fo" y "fd" (del mismo codigo que expones):

a) fo = ActiveCell.Row
a la variable "fo" le asignas un numero (el de fila de la celda actual tomado de la propiedad .Row)

b) fd = Worksheets("banco").Cells(4, 9)
se asume/espera/supone/... que Cells(4, 9) (la celda [i9]) de la hoja "banco" contendra tambien un numero, PERO...
en este mensaje comentas que la celda contiene "la direccion (variable) de donde quiero que se grabe la nueva info"

c) si suponemos que "la direccion variable" en la celda i9 es del tipo "A1" (a1, c10, m45, o ???), entonces...
Worksheets("banco").Cells(4, 9) devolvera el contenido de la celda i9... (a1, c10, m45, o ???), por lo tanto...
necesitas cambiar la instruccion:
de: -> fd = Worksheets("banco").Cells(4, 9)
a: -> fd = Range(Worksheets("banco").Cells(4, 9)).Row

saludos,
hector.

__ OP __
__ 1 __
> este codigo funciona perfectamente: Range(Cells(4, 13)).Select
> me permite posicionarme en la celda a la que hace referencia la celda (4, 13)
> sino, de que otra forma se puede hacer?

1) si tu Cells(4, 13) (que en realidad es la celda M4) contiene la referencia "a otra celda" (p.e. A1 o C10 o M45 ...)
entonces la instruccion Range(Cells(4, 13)) es igual a la primera forma comentada:
=> Range(<direccion textual>) o... Range("A1") o... Range("C10") o... Range("M45") o... ???

__ 2 __
> Y de paso: estoy teniendo problemas para hacer funcionar este codigo :
> Sub deposito()
> fo = ActiveCell.Row
> fd = Worksheets("banco").Cells(4, 9)
> With Worksheets("banco")
> .Cells(fd, 1) = Range(Cells(2, 9), Cells(2, 9)) ' lo puse asi como vos me dijiste que era la sintaxis, pero tmb da error
> .Cells(fd, 2) = "cheque"
> .Cells(fd, 3) = Worksheets("3º").Cells(fo, 4)
> .Cells(fd, 4) = Worksheets("3º").Cells(fo, 5)
> .Cells(fd, 5) = Worksheets("3º").Cells(fo, 7)
> .Cells(fd, 7) = Worksheets("3º").Cells(fo, 6)
> End With
> End Sub

2) aqui podria haber dos o mas situaciones "desconocidas" (para mi)...

a) que contiene tu Cells(2, 9) que en realidad es la celda i2 de la hoja activa -???-

b) de igual forma, la Cells(4, 9) [i9] de la hoja "banco" que es lo que contiene -???-
se supone que debera contener el numero para aplicarse a la variable <fila> de un Cells(<fila>, <columna>)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida