Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

INSERTAR FILA (MACRO) CON LAS FORMULAS DE LA FILA QUE LE ANTECEDE

2,407 views
Skip to first unread message

CARLOS CARNERO

unread,
Jun 20, 2006, 11:11:06 AM6/20/06
to
INSERTAR FILA (MACRO) CON LAS FORMULAS DE LA FILA QUE LE ANTECEDE

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

CARLOS CARNERO

unread,
Jun 20, 2006, 1:08:57 PM6/20/06
to
Please Héctor Miguel ó si alguien conoce el tema:

Saludos desde el Perú,

CARLOS CARNERO ha escrito:

KL

unread,
Jun 20, 2006, 1:26:03 PM6/20/06
to
Hola Carlos,

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

CARLOS CARNERO

unread,
Jun 20, 2006, 2:13:03 PM6/20/06
to
Gracias KL por tu amable atención. Una de las formulas es una
condicional sumatoria que se encuentra en la columna A. Ej. celda A24
==> =SI(B24<>"",A23+1,"")
1° Ahora cumple con el propósito de copiar las formula de la fila que
le antecede.
2° Pero ahora me encuentro que la fila subsiguiente como la celda
A25==> =SI(B25<>"",A23+1,""), me mantiene la sumatoria tan igual como
la celda A24, es decir el A23+1, cuando lo correcto debería ser A24+1.

Mi agradecimiento de antemano,

Carlos Carnero Gálvez


KL ha escrito:

Héctor Miguel

unread,
Jun 20, 2006, 2:23:14 PM6/20/06
to
hola, Carlos !

> ... 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:= _

CARLOS CARNERO

unread,
Jun 20, 2006, 4:13:42 PM6/20/06
to
Mi estimado Hector mil gracias por tu atención: Resulta vacanudo esta
macro a excepción que la columna que debe sumar es la "A" y no la "B".

> [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:

Héctor Miguel

unread,
Jun 20, 2006, 5:09:31 PM6/20/06
to
hola, Carlos !

> ... 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.


CARLOS CARNERO

unread,
Jun 20, 2006, 5:44:43 PM6/20/06
to
Hector una vez más muy agradecido por tu atención: veamos. Si utilizo
la última sintaxis que me has descrito vuelvo al punto donde se copia
efectivamente la formula de la fila anterior y aún se mantiene
congelada la fila que le continua. Usando la formula de CONTARA esto
sólo va ha estar reflejado en una sola celda, cuando lo que busco es
que el insertar fila sea en la celda activa. Creo que la anterior
sintaxis era la más aproximada a excepción que esta sumatoria no
debería darse en la columna B, sino en la A.

Gracias,

Carlos Carnero G.


Héctor Miguel ha escrito:

Héctor Miguel

unread,
Jun 21, 2006, 2:32:01 AM6/21/06
to
hola, Caros !

> ... 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 __

CARLOS CARNERO

unread,
Jun 21, 2006, 10:44:27 AM6/21/06
to
Hola Hector: Antetodo mil disculpas quizas por no explicarme bien.
Explicando de otro modo. Tengo entre las columnas A a la K los
siguientes encabezados respectivamente: ITEM CODIGO GENERO DEL
ARCHIVO TIPO DE DCMTO AÑO MES Del Al UBICACIÓN OBSEVACIONES IDEM.
Como se puede apreciar es una base de datos de un Archivo. Entonces en
la columna A (la del Item) cada fila representa un número correlativo
ascendente con respecto a la fila inferior (Ej. Fila 5= 2, Fila 6=3) y
para ello uso esta formula condicional =SI(B5<>"",A4+1,"") siendo A4=1.


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:

CARLOS CARNERO

unread,
Jun 22, 2006, 11:16:10 AM6/22/06
to
Hola Hector: Disculpa mi insistencia pero no logro aún mi objetivo.
Por favor dame una mano con este tema.

Gracias,

Carlos Carnero Gálvez


CARLOS CARNERO ha escrito:

CARLOS CARNERO

unread,
Jun 22, 2006, 4:14:07 PM6/22/06
to
Hola Hector: carambas estoy muy avergonzado por causarte molestias.
Mirá ya me di cuenta como opera el error, era mio al colocar el cursor
en la celda activa (lo estaba haciendo en la columna B), por ello es
que me sumaba el código y no el correlativo que se encontraba en la
columna.

Muchas gracias HECTOR & KL por tanta generosidad.

Un abrazo desde el Perú,

Héctor Miguel

unread,
Jun 22, 2006, 9:36:16 PM6/22/06
to
hola, Carlos !

> ... 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.


CARLOS CARNERO

unread,
Jun 23, 2006, 10:27:56 AM6/23/06
to
Claro Hector todo esta bien ahora. Como lo decía anteriormente y al no
leer bien tus apreciaciones: el error era mío porque al colocar el
cursor en la celda activa esta tendría que ser cualquier fila en la
columna A, mientras que yo erróneamente colocaba el cursor en las
filas de la columna B.

Mil gracias.

Saludos desde el Perú,


Héctor Miguel ha escrito:

0 new messages