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
 

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.

Preguntas similares