Macro lenta para formato hoja

19/06/2006 - 03:28 por klomkbock | Informe spam
Hola a todos de nuevo.

Tengo una macro que da formato a la hoja activa (la he puesto en el evento
Activate de las hojas, y para terceros libros en el codigo que trabaja con
ellos) de un libro, pues el nº de registros cambia con cierta frecuencia.

Para pocos registros va bastante bien, pero cuando se trata de varios
miles, se eterniza (casi 2 minutos para 10.000 registros). Supongo que
debe haber mas de una forma de que sea mas rapida, pero tras muchas
pruebas no logro dar con ellas. Si podeis echarme una mano de nuevo os lo
agradezco. A continuacion expongo el codigo:

Public Sub FormatoHojaActiva()
Dim CeldaH As Range
Application.ScreenUpdating = False
With ActiveSheet
With .UsedRange
.Columns.AutoFit
With .Borders: .LineStyle = xlContinuous: .Weight = xlThin: End With
With .Font: .Size = 9: .Bold = False: End With
.VerticalAlignment = xlVAlignCenter
.HorizontalAlignment = xlGeneral
End With
With .Columns("b:b"): .ColumnWidth = 35: .WrapText = True
With .Font: .Bold = True: .Size = 10: End With: End With
With .Columns("h:i"): .ColumnWidth = 22: .WrapText = True
.Font.Size = 8: End With
.Rows.AutoFit
With .Range("1:1"): With .Font: .Bold = True: .Size = 8: End With
.HorizontalAlignment = xlCenter: End With
For Each CeldaH In .Range(.Range("a1"), .Range("a65536").End(xlUp))
With CeldaH
'' aqui habia puesto "If .RowHeight < 25 Then .RowHeight = 25" _
'' pensando que tardaria menos, pero parece tardar mas que con Else
If .RowHeight < 25 Then
.RowHeight = 25
Else
.RowHeight = .RowHeight
End If
End With
Next
End With
Application.ScreenUpdating = True
End Sub

Muchas gracias de antemano

Un saludo y hasta pronto
Ivan

Preguntas similare

Leer las respuestas

#1 klomkbock
19/06/2006 - 04:27 | Informe spam
Hola Francisco MTY, gracias por tu interes

Como tu muy bien dices, en el codigo se ve el que, pero no el porque.

Voy a ver si lo se explicar: quiero que se aplique autofit a todas las
columnas menos a tres (b, h, i, creo) que tendrian un ancho fijo y se les
aplica wraptext. El problema es que al aplicar el wraptext el alto de fila
no se ajusta automaticamente (al menos a mi), por lo que le aplico un
autofit a las filas, pero entonces las que no han usado el wraptext se
quedan muy "bajas" y "feas", por lo que les doy un alto minimo (25) a las
que se han quedado muy "bajas". El resto son bordes, titulos de columna,
negrita y tamaños segun campo.

Espero que se me haya entendido.

Un saludo y hasta pronto
Ivan

Francisco MTY wrote:

Con el codigo se entiende mas o menos lo que deseas hacer pero por que mejor
no indicas lo que deseas en palabras escritas :)

Saludos
Respuesta Responder a este mensaje
#2 Francisco MTY
19/06/2006 - 04:47 | Informe spam
Con el codigo se entiende mas o menos lo que deseas hacer pero por que mejor
no indicas lo que deseas en palabras escritas :)

Saludos
Respuesta Responder a este mensaje
#3 Francisco MTY
19/06/2006 - 07:13 | Informe spam
Por que no mejor simplemente intentas hacer lo mismo pero solo a la celda
activa y evitas el caso de repasar todo el libro activo (hoja) y aplicar el
formato nuevamente en todas las celdas.

Solo tendrias que validar ".column" y ".row" si son y correponden a los
formatos en el evento "selectionchange()" de la hoja activa.

No se si haya sido claro con el dato

Saludos
Respuesta Responder a este mensaje
#4 klomkbock
19/06/2006 - 16:03 | Informe spam
Hola francisco MTY, gracias de nuevo

La verdad es que no tengo claro del todo a lo que te refieres, pero
supongo que es algo asi como dar formato solo al registro añadido( o
quitarlo si se elimina)(nota: no seria con celda activa) que es mas o
menos la alternativa que me estoy planteando, aunque en vez de en eventos,
directamente en el codigo que transfiere/elimina el/los registros. Lo
unico que siempre he pensado, la verdad es que no se muy bien porque, que
seria mas rapido dar un formato global. En fin, estudiare tu propuesta.

Gracias en cualquier caso
Un saludo y hasta pronto
Ivan

Francisco MTY wrote:

Por que no mejor simplemente intentas hacer lo mismo pero solo a la celda
activa y evitas el caso de repasar todo el libro activo (hoja) y aplicar el
formato nuevamente en todas las celdas.

Solo tendrias que validar ".column" y ".row" si son y correponden a los
formatos en el evento "selectionchange()" de la hoja activa.

No se si haya sido claro con el dato

Saludos
Respuesta Responder a este mensaje
#5 Francisco MTY
19/06/2006 - 19:00 | Informe spam
A ver entonces entiendo que los datos los transfieres de otra hoja / libro
y despues aplicas el formato? , ese detalle habria convenido que lo
mencionaras antes.
Algun otro detalle que se nos escape ?
Saludos
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida