Muy buena a todos, un servicio: En Excel 97 tengo una hoja protegida
donde las columnas (2) que contienen formulas están protegidas todas
esas celdas y las otras columnas no lo están. Pero deseo insertar fila
(s) de manera que copie sólo las formulas de la fila que le antecede
(podría ser una a una cada fila), de manera que siempre mantenga
protegida a las columnas que contienen dichas formulas.
He intentado con una macro, pero lamentablemente me realiza la
operación en la celda donde hice la macro, pero lo que yo deseo es
donde se ubique el cursor, ahí realizar dicha macro. Además de ello
cuando vuelvo a aperturar el libro, la macro pide la contraseña para
desprotegerla.
Les pido por favor me auxilien con este tema y agradeciendo de antemano
su atención.
Saludos desde el Perú,
P.D. Esta es la sintaxis:
Sub Imagen538_AlHacerClic()
'
' Imagen538_AlHacerClic Macro
' Macro grabada el 20/06/2006 por
'
'
Range("D27").Select
ActiveSheet.Unprotect
Selection.EntireRow.Insert
Range("A26:L26").Select
Range("L26").Activate
Selection.Copy
Range("A27").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=False
Range("B27:I27").Select
Application.CutCopyMode = False
Selection.ClearContents
Range("A26").Select
Selection.AutoFill Destination:=Range("A26:A29"),
Type:=xlFillDefault
Range("A26:A29").Select
Range("B27").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True,
Scenarios:=True
End Sub
Saludos desde el Perú,
CARLOS CARNERO ha escrito:
Tal vez algo asi (cambia la clave a la tuya):
'---------------------
Sub Imagen538_AlHacerClic()
Dim Clave As String, rng As Range
Clave = "TuClave"
Set rng = Selection.EntireRow
Application.ScreenUpdating = False
ActiveSheet.Unprotect Clave
With rng
.Copy
.Offset(.Rows.Count).Insert
With .Offset(.Rows.Count)
On Error Resume Next
.SpecialCells(xlCellTypeConstants).ClearContents
.Cells(1).Select
Application.CutCopyMode = False
On Error GoTo 0
End With
End With
ActiveSheet.Protect Clave
Application.ScreenUpdating = True
End Sub
'---------------------
Saludos,
KL
Mi agradecimiento de antemano,
Carlos Carnero Gálvez
KL ha escrito:
> ... Excel 97... hoja protegida donde las columnas (2) que contienen formulas estan protegidas
> ... y las otras columnas no lo estan... deseo insertar fila(s) de manera que copie solo las formulas de la fila que le antecede
> (podria ser una a una cada fila), de manera que siempre mantenga protegida a las columnas que contienen dichas formulas.
> He intentado con una macro, pero... me realiza la operacion en la celda donde hice la macro
> .. lo que yo deseo es donde se ubique el cursor, ahi realizar dicha macro.
> Ademas... cuando vuelvo a aperturar el libro, la macro pide la contrase#a para desprotegerla...
[al parecer]... deseas insertar una fila [donde este la celda 'activa'] y copiar las formulas de la fila 'inmediata anterior' -?-
-> segun el rango expuesto, las columnas 'importantes' son 'A:L'
y luego deseas 'limpiar' las columnas -supongo- NO-formulas: 'B:I' -?-
-> lo que 'me intriga' es que tipo de formula tengas en la columna 'A'... que necesitas hacer un 'AutoFill'...
y que 'inluya' hasta la fila 29 [o la que vaya hasta 'equis'-momento] -???-
[espero que no estes usando la funcion 'fila()' con referencias 'relativas'... o algo 'parecido'] -?-
1) para que la proteccion de 'la hoja' NO afecte las acciones de tus macros [ya lo has comentado antes]...
== en el modulo de codigo del libro [ThisWorkbook] ==
Private Sub Workbook_Open()
Worksheets("hoja1").Protect _
PassWord:="pon aqui tu clave", _
UserInterfaceOnly:=True
End Sub
2) una posible 'alternativa' al codigo que expones...
Sub Imagen538_AlHacerClic()
With ActiveCell
.Offset(-1).EntireRow.Copy
Cells(.Row, 1).Insert xlDown
Cells(.Row - 1, 2).Resize(, 8).ClearContents
.Offset(-2).AutoFill .Offset(-2).Resize(4) ' aqui es donde tengo 'la duda' :)) '
End With
End Sub
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
__ el codigo expuesto __
Sub Imagen538_AlHacerClic()
Range("D27").Select
ActiveSheet.Unprotect
Selection.EntireRow.Insert
Range("A26:L26").Select
Range("L26").Activate
Selection.Copy
Range("A27").Select
ActiveSheet.Paste
Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone,SkipBlanks:= _
> [al parecer]... deseas insertar una fila [donde este la celda 'activa'] y copiar las formulas de la fila 'inmediata anterior' -?-
Asi es.
> -> segun el rango expuesto, las columnas 'importantes' son 'A:L'
Son la A y la K, aunque esta última es sólo = A, la primera es una
sumatoria condicional y es en donde de operar la macro
=SI(B18<>"",A17+1,"")
> y luego deseas 'limpiar' las columnas -supongo- NO-formulas: 'B:I' -?-
Asi es amigo.
> -> lo que 'me intriga' es que tipo de formula tengas en la columna 'A'... que necesitas hacer un 'AutoFill'...
Descrito lineas arriba.
> y que 'inluya' hasta la fila 29 [o la que vaya hasta 'equis'-momento] -???-
Asi que incluya hasta n filas
> [espero que no estes usando la funcion 'fila()' con referencias 'relativas'... o algo 'parecido'] -?-
No estoy usando ninguna función fila.
Saludos desde el Perú,
Carlos Carnero Gálvez
Héctor Miguel ha escrito:
> ... a excepcion que la columna que debe sumar es la "A" y no la "B"...
> ... A, la primera es una sumatoria condicional y es en donde de operar la macro
> =SI(B18<>"",A17+1,"")
>> y luego deseas 'limpiar' las columnas -supongo- NO-formulas: 'B:I' -?-
>> y que 'inluya' hasta la fila 29 [o la que vaya hasta 'equis'-momento] -???-
> Asi que incluya hasta n filas [...]
si alcanzo a 'interpretar' [bien] el sentido de la formula de 'auto-numeracion' an la columna 'A'... -?-
-> podrias 'aligerar' el codigo sin la necesidad del 'AutoFill'
[ya que no intervendria la 'perdida' de la referencia en la formula por la fila 'insertada']
y la 'carga' de n_filas con la funcion si-condicional para la auto-numeracion... SI...
a) cambias la formula +/- a la siguiente -> suponiendo que la primer celda 'auto-numerable' fuera 'A7']...
=contara($b$7:b7) [y la copias/arrastras/... hasta las n_filas 'ocupadas actualmente'] :)) Y...
b) 'recortas' las lineas de codigo [que inserta una fila] +/- a las siguientes...
Sub Imagen538_AlHacerClic()
With ActiveCell
.Offset(-1).EntireRow.Copy
Cells(.Row, 1).Insert xlDown
Cells(.Row - 1, 2).Resize(, 8).ClearContents
End With
End Sub
si cualquier duda... 'algo ma ha fallado'... [o informacion adicional]... comentas ?
saludos,
hector.
Gracias,
Carlos Carnero G.
Héctor Miguel ha escrito:
> ... vuelvo al punto donde se copia efectivamente la formula de la fila anterior y aún se mantiene congelada la fila que le continua.
> ... la formula de CONTARA... va ha estar reflejado en una sola celda... lo que busco es que el insertar fila sea en la celda activa.
> ... la anterior sintaxis era la mas aproximada a excepcion que esta sumatoria no deberia darse en la columna B, sino en la A.
hay 'algo' [como] que no acabo de entender :-(
1) el codigo expuesto [punto b anterior], al final de cuentas, lo que hace es [y segun yo, es lo que solicitas ?]...
a) inserta una fila EN [o a partir de] -> la celda activa
b) copia [en la fila insertada] la fila inmediata superior/anterior [con todo y formulas]
c) 'limipa' [en la fila insertada] las columnas 'B:I'
2) la formula de 'auto-numeracion' => en la columna 'A' [segun el punto a anterior]...
-> 'mantiene' el orden consecutivo de numeracion -> en cuanto escribes 'algo' en su columna 'B'
-> recuerda que acaba de ser 'limpiado' el rango de las columnas 'B:I' [lo cual evita la necesidad del 'AutoFill' por codigo]
-> si NO quieres 'esperarte' a poner algo en la columna 'B'... cambia la formula propuesta [desde la celda inicial] p.e.
de: -> =contara($b$7:b7)
a. -> =filas($b$7:b7)
si algo de lo que estoy suponiendo [y probando] no esta de acuerdo con alguna otra 'realidad'...
comentas algun detalle mas... 'significativo' ?
saludos,
hector.
__ la consulta anterior __
Este es el archivo
ITEM CODIGO GENERO DEL ARCHIVO TIPO DE
DCMTO AÑO MES Del Al UBICACIÓN OBSEVACIONES IDEM
2 B014.03.0001 VENTAS BOLETA 014 2003 JUNIO 0000010 ALCANFORES
ACTIVO 2
3 B017.02.0001 VENTAS BOLETA
017 2002-2003 AGOSTO/DICIEMBRE 0000001 0000211 ALCANFORES ACTIVO 3
4 B017.04.0001 VENTAS BOLETA
017 2004 ENERO/DICIEMBRE 0000212 0000387 ALCANFORES ACTIVO 4
ALCANFORES ACTIVO
5 B017.05.0001 VENTAS BOLETA
017 2005 ENERO/DICIEMBRE 0000389 0000679 ALCANFORES ACTIVO FALTA 388 5
6 B017.06.0001 VENTAS BOLETA
017 2005-2006 NOV/ABR 0000680 0000780 ALCANFORES ACTIVO 6
Finalmente lo que debe operar la macro es que cuando inserte una fila
autosume + 1, el valor del item anterior. Y la fila subsiguiente
continue con el correlativo correspondiente.
Gracias y saludos desde el Perú,
P.D. Trate de enviarte el archivo pero al parecer revoto. Si no tienes
ningún inconveniente y te es posible enviame tu correo a
ccar...@bvl.com.pe
Héctor Miguel ha escrito:
Gracias,
Carlos Carnero Gálvez
CARLOS CARNERO ha escrito:
Muchas gracias HECTOR & KL por tanta generosidad.
Un abrazo desde el Perú,
> ... ya me di cuenta como opera el error, era... al colocar el cursor en la celda activa (lo estaba haciendo en la columna B)
> por ello es que me sumaba el codigo y no el correlativo que se encontraba en la columna...
[segun yo]... al codigo de la propuesta no le 'afecta' cual sea 'la columna' -> de la celda activa, ya que siempre...
-> se inserta la fila desde la columna 1
-> se 'limpian' 8 columnas iniciando desde la columna 2 o sea las columnas 'B:I'
-> lo que 'hace' el codigo... te lo pongo como comentarios en el mismo ;)
Sub Imagen538_AlHacerClic()
With ActiveCell ' se marca la celda activa como 'parametro de partida'
.Offset(-1).EntireRow.Copy ' se copia la fila inmediata anterior... COMPLETITA
Cells(.Row, 1).Insert xlDown ' se inserta una fila 'nueva' copiando la fila anterior [con todo y formulas]
Cells(.Row - 1, 2).Resize(, 8).ClearContents ' se limpian las columnas 'B:I'
End With
End Sub
si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Mil gracias.
Saludos desde el Perú,
Héctor Miguel ha escrito: