Copiar formato y formulas de la fila superior

21/02/2006 - 21:05 por MANZA | Informe spam
Buenas grupo,
En el proyecto que me ocupa ahora tengo una base de datos de la cual
cogo los valores cada mes para lo que tengo 12 hojas una cuadricula por
mes.
cada mes me pueden varias el numero de filas, por ello lo que quiero
hacer es insertar el campo de la base de datos en la hoja de excel y
copiar el formato y las formulas de la fila superior hasta que no haya
registros, en la fila nueve tengo el formato y las formulas que
necesito para el resto de las filas he intentado hacerlo de la
siguiente manera:

If Not RecordsetVacioDAO(rst) Then
' escribo el nombre de los campos empezando en B2
ActiveSheet.Range("A9").Select
lngFila = 9
Do While Not rst.EOF
ActiveSheet.Cells(lngFila, 1) = rst!nombre
ActiveSheet.Cells(lngFila, 2) = rst!obra
ActiveSheet.Cells(lngFila, 45) = rst!preciohora
ActiveSheet.Cells(lngFila, 51) = rst!importe
ActiveSheet.Cells(lngFila, 57) = rst!voluntaria
Range.Row(lngFila).Selection
Selection.Copy
Range.Row(lngFila + 1).Selection
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone,
SkipBlanks:= _
False, Transpose:=False
de aqui en adelante
tambien bien.
rst.MoveNext
lngFila = lngFila + 1
Loop
End If
End Sub

Bueno os lo pongo a modo orientativo para que sepais lo que estoy
haciendo, la fila ni siquiera me la deja seleccionar asi ke no se muy
bien por donde cogerlo.

Un saludo

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
23/02/2006 - 05:23 | Informe spam
hola, MANZA !

1) la 'forma' en la que usas la propiedad 'Selection' NO es la 'adecuada'... PRIMERO tendrias que hacer un '.Select'

2) es mas 'rapido' si copias formulas y formatos ANTES de pasar [algunos] registros de la BD a las filas -> en la hoja activa
[suponiendo que en las columnas 'intermedias' tienes las formulas, la forma que usas SOLO copia los formatos NO las formulas]
[p.e.] puedes conocer el numero de filas que trae tu recordset con la instruccion: -> rst.RecordCount

3) con los datos que expones [de tu macro] en la consulta... prueba con las modificaciones que te propongo enseguida...
-> suponiendo que 'la ultima' columna CON formatos/formulas -> es la # 57 ['BE'] <= modifica de ser necesario ;)

If Not RecordsetVacioDAO(rst) Then
With Range("a9:be9")
.Copy
.Resize(rst.RecordCount)
End With
lngFila = 9
Do While Not rst.EOF
Cells(lngFila, 1) = rst!nombre
Cells(lngFila, 2) = rst!obra
Cells(lngFila, 45) = rst!preciohora
Cells(lngFila, 51) = rst!importe
Cells(lngFila, 57) = rst!voluntaria
rst.MoveNext
lngFila = lngFila + 1
Loop
End If

si algo falla... cualquier duda... o informacion adicional... comentas ?
saludos,
hector.
=> ... una base de datos de la cual cogo los valores... cada mes me pueden varias el numero de filas
... quiero... insertar el campo de la base de datos... y copiar el formato y las formulas de la fila superior hasta que no haya registros
en la fila nueve tengo el formato y las formulas que necesito para el resto de las filas he intentado hacerlo de la siguiente manera:
If Not RecordsetVacioDAO(rst) Then
' escribo el nombre de los campos empezando en B2
ActiveSheet.Range("A9").Select
lngFila = 9
Do While Not rst.EOF
ActiveSheet.Cells(lngFila, 1) = rst!nombre
ActiveSheet.Cells(lngFila, 2) = rst!obra
ActiveSheet.Cells(lngFila, 45) = rst!preciohora
ActiveSheet.Cells(lngFila, 51) = rst!importe
ActiveSheet.Cells(lngFila, 57) = rst!voluntaria
Range.Row(lngFila).Selection
Selection.Copy
Range.Row(lngFila + 1).Selection
Selection.PasteSpecial Paste:=xlFormats, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
de aqui en adelante tambien bien.
rst.MoveNext
lngFila = lngFila + 1
Loop
End If
End Sub
... la fila ni siquiera me la deja seleccionar asi ke no se muy bien por donde cogerlo.
Respuesta Responder a este mensaje
#2 MANZA
26/02/2006 - 23:05 | Informe spam
Lo he cambiado y pone lo sigueinte al ejecutar:
Uso de la propiedad no valido, esto lo pone en el resize, porque puede
ser??
Respuesta Responder a este mensaje
#3 Héctor Miguel
27/02/2006 - 04:24 | Informe spam
hola, MANZA !

Lo he cambiado y pone lo sigueinte al ejecutar:
Uso de la propiedad no valido, esto lo pone en el resize, porque puede ser??



perdon... :)) [el codigo lo escribi sin probarlo] :-(
y efectivamente el uso de la propiedad [resize] no es el apropiado ;)

-> cambia la parte de codigo propuesta que dice:

If Not RecordsetVacioDAO(rst) Then
With Range("a9:be9")
.Copy
.Resize(rst.RecordCount)
End With

-> por la siguiente [que es incluso mas breve]:

If Not RecordsetVacioDAO(rst) Then
Range("a9:be9").Resize(rst.RecordCount).FillDown

saludos,
hector.
Respuesta Responder a este mensaje
#4 MANZA
27/02/2006 - 15:34 | Informe spam
Correcto hector de esta ultima forma me hace lo que queria, Muchas
gracias.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida