Mas vueltas con el alto de fila

19/07/2005 - 23:54 por javi | Informe spam
Hola

Perdon por la insistencia, pero, a pesar de la ayuda de Hector, no logro
que funcione.

El problema es que tengo una celda combinada, en la que hay un BUSCARV
que obtiene los datos de otro libro distinto. A pesar de que el ajuste
está puesto en varias lineas, el alto de fila no se autoajusta, ni
entrando en la celda, ni con Formato>Fila>Autoajustar, ni con doble clic
en el indicador de fila.

No se si el problema es por ser una celda combinada o por obtener lo
datos de un libro distinto.

El código que me envió Hector, es este:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, [a1].Precedents) Is Nothing Then
[a1].WrapText = False: [a1].WrapText = True
End If
End Sub

He probado a cambiar la celda, he probado con este otro codigo (si es
una burrada solicito perdon para los novatos)

Private Sub Worksheet_Calculate()

Range("c15:e15").Select 'Rango de las Celdas Combinadas
With Selection
.WrapText = True 'Ajuste de linea
.MergeCells = True 'Indicar celdas combinadas
End With
Selection.Rows.AutoFit 'Autoajuste de la fila

End Sub


No sé que mas puedo hacer ¿alguna idea mas?

Muchas gracias

Javi

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
20/07/2005 - 02:26 | Informe spam
hola, javi !

... a pesar de la ayuda de Hector, no logro que funcione.
... tengo una celda combinada... un BUSCARV que obtiene los datos de otro libro distinto
... el ajuste... en varias lineas, el alto de fila no se autoajusta, ni entrando en la celda, ni con [...]
... si el problema es por ser una celda combinada o por obtener lo datos de un libro distinto [...]
Private Sub Worksheet_Calculate()
Range("c15:e15").Select 'Rango de las Celdas Combinadas [...]
... que mas puedo hacer ¿alguna idea mas?



[segun recuerdo]... desde marzo que iniciamos a 'tratar' con este 'detalla'...
-> es la primera vez que mencionas que se trata de ->celdas combinadas<- :(
[que 'por definicion'... NO se 'autoajustan' -NI en alto NI en ancho de las celdas] :\
-> conociendo [ahora] cual es la situacion 'real' [y el rango al que deseas hacer el ajuste']...
prueba con las siguientes lineas...
en el modulo de codigo de 'esa' hoja ==Private Sub Worksheet_Calculate()
Dim AnchoTotal As Single, AnchoCelda As Single, _
Alto As Single, Col As Byte, Comg As Byte
With Me.Range("c15")
Comb = 2
For Col = .Column To .Column + Comb
AnchoTotal = AnchoTotal + Cells(.Row, Col).ColumnWidth
Next
AnchoCelda = .ColumnWidth
.MergeCells = False
.ColumnWidth = AnchoTotal
.EntireRow.AutoFit
Alto = .RowHeight
With .Resize(, Comb + 1)
.Merge
.Columns(1).ColumnWidth = AnchoCelda
.EntireRow.RowHeight = Alto
End With
End With
End Sub

[seguramente] seria mas conveniente cambiar de evento [p.e. al '_change'] y monitorear la celda que 'causa' el cambio
[ademas] es posibe que existan 'otras' celdas en iguales circunstancias -?-
vamos haciendo la prueba y... si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
Respuesta Responder a este mensaje
#2 javi
21/07/2005 - 00:34 | Informe spam
Hola Héctor Miguel

Muchas gracias,como siempre, por tu ayuda.

Tengo un problema y estoy intentando resolverlo pero no le veo la causa.

Sucede que al llegar a la línea que combina de nuevo las celdas

.Merge

vuelve a iniciarse el procedimiento, y así hasta el infinito. He probado
con todo el código y al repetirse me cambia el ancho de la celda C15
hasta que llega al maximo y me da error.

También he probado a eliminar las líneas que controlan el ancho de la
columna pero al llegar a
.Merge
se reinicia el procedimiento y no para hasta que detengo la macro.

Intentaré mirarlo mejor mañana, pero no veo por qué se tiene que repetir
todo de nuevo.

Por si sirve de ayuda (perdón por no avisar que la celda estaba
combinada, pero uno se acostumbra a verla así y... ¡novatos!) la celda
C15 busca un valor de la celda B15 en otro libro que contiene una base
de datos de productos.

Entiendo de tu mensaje que la celda B15 sería la celda a controlar para
ver cuándo cambia y que entonces cambie el alto de fila de la C15 ¿es así?.

Muchas gracia de nuevo

Javi




Héctor Miguel escribió:
hola, javi !


... a pesar de la ayuda de Hector, no logro que funcione.
... tengo una celda combinada... un BUSCARV que obtiene los datos de otro libro distinto
... el ajuste... en varias lineas, el alto de fila no se autoajusta, ni entrando en la celda, ni con [...]
... si el problema es por ser una celda combinada o por obtener lo datos de un libro distinto [...]
Private Sub Worksheet_Calculate()
Range("c15:e15").Select 'Rango de las Celdas Combinadas [...]
... que mas puedo hacer ¿alguna idea mas?




[segun recuerdo]... desde marzo que iniciamos a 'tratar' con este 'detalla'...
-> es la primera vez que mencionas que se trata de ->celdas combinadas<- :(
[que 'por definicion'... NO se 'autoajustan' -NI en alto NI en ancho de las celdas] :\
-> conociendo [ahora] cual es la situacion 'real' [y el rango al que deseas hacer el ajuste']...
prueba con las siguientes lineas...
en el modulo de codigo de 'esa' hoja ==> Private Sub Worksheet_Calculate()
Dim AnchoTotal As Single, AnchoCelda As Single, _
Alto As Single, Col As Byte, Comg As Byte
With Me.Range("c15")
Comb = 2
For Col = .Column To .Column + Comb
AnchoTotal = AnchoTotal + Cells(.Row, Col).ColumnWidth
Next
AnchoCelda = .ColumnWidth
.MergeCells = False
.ColumnWidth = AnchoTotal
.EntireRow.AutoFit
Alto = .RowHeight
With .Resize(, Comb + 1)
.Merge
.Columns(1).ColumnWidth = AnchoCelda
.EntireRow.RowHeight = Alto
End With
End With
End Sub

[seguramente] seria mas conveniente cambiar de evento [p.e. al '_change'] y monitorear la celda que 'causa' el cambio
[ademas] es posibe que existan 'otras' celdas en iguales circunstancias -?-
vamos haciendo la prueba y... si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.


Respuesta Responder a este mensaje
#3 Héctor Miguel
21/07/2005 - 01:19 | Informe spam
hola, javi !

... un problema... intentando resolverlo pero no le veo la causa.
... al llegar a la línea que combina de nuevo las celdas
.Merge
vuelve a iniciarse el procedimiento... hasta el infinito [...]
... la celda C15 busca un valor de la celda B15 en otro libro que contiene una base de datos de productos.
... la celda B15 sería la celda a controlar para ver cuando cambia y que entonces cambie el alto de fila de la C15 ¿es así?.



no se que tan complejo pueda ser un re/calculo del modelo [como para que se este disparando el evento constantemente] -?-
para controlar los cambios a traves de la celda 'B15'... prueba con las siguientes lineas [en lugar del evento '_calculate']...
si cualquier duda... comentas?
saludos,
hector.
en el modulo de codigo de 'esa' hoja ==Dim Largo As Integer
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$15" Then Exit Sub
Application.ScreenUpdating = False
Dim AnchoTotal As Single, AnchoCelda As Single, _
Alto As Single, Col As Byte, Comb As Byte
With Range("c15")
If Len(.Value) = Largo Then Exit Sub
Comb = 2
For Col = .Column To .Column + Comb
AnchoTotal = AnchoTotal + Cells(.Row, Col).ColumnWidth
Next
AnchoCelda = .ColumnWidth
.MergeCells = False
.ColumnWidth = AnchoTotal
.EntireRow.AutoFit
Alto = .RowHeight
With .Resize(, Comb + 1)
.Merge
.Columns(1).ColumnWidth = AnchoCelda
.EntireRow.RowHeight = Alto
End With
Largo = Len(.Value)
End With
End Sub
Respuesta Responder a este mensaje
#4 javi
21/07/2005 - 17:53 | Informe spam
Hola Héctor

Muchas gracias, esta vez si funciona.

La verdad es que el modelo no es muy complejo: una hoja de ofertas de
productos en la columna B tiene códigos, en la C tiene una función de
búsqueda (busca dependiendo del proveedor - el codigo está en la celda
A14, un número- y del código).

A B C D E F G H I

14 CodProveedor
15 Item Código Descripción Cantidad Precio % Dcto Importe 16 I1
17 I2
18 I3
19 I4
20 I5
21 I6

El problema es que algunas descripciones son muy largas y necesito
varias filas en la misma celda.


Estoy mirando cómo aplicar tu código para todas las celdas de las
descripciones, el problema es que inicialmente hay 20 celdas, pero puede
haber más. Si tienes alguna sugrencia para ello también lo agradecería.

Abusando otro poco de tu generosidad, ¿se puede hacer que un grupo de
celdas vayan juntas en la misma página a la hora de imprimirse? Lo
necesitaría para lasceldas del final de la Oferta, las que incluyen los
totales, impuestos, condiciones de envio,...

Muchas gracias

Javi



Héctor Miguel escribió:
hola, javi !


... un problema... intentando resolverlo pero no le veo la causa.
... al llegar a la línea que combina de nuevo las celdas
.Merge
vuelve a iniciarse el procedimiento... hasta el infinito [...]
... la celda C15 busca un valor de la celda B15 en otro libro que contiene una base de datos de productos.
... la celda B15 sería la celda a controlar para ver cuando cambia y que entonces cambie el alto de fila de la C15 ¿es así?.




no se que tan complejo pueda ser un re/calculo del modelo [como para que se este disparando el evento constantemente] -?-
para controlar los cambios a traves de la celda 'B15'... prueba con las siguientes lineas [en lugar del evento '_calculate']...
si cualquier duda... comentas?
saludos,
hector.
en el modulo de codigo de 'esa' hoja ==> Dim Largo As Integer
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address <> "$B$15" Then Exit Sub
Application.ScreenUpdating = False
Dim AnchoTotal As Single, AnchoCelda As Single, _
Alto As Single, Col As Byte, Comb As Byte
With Range("c15")
If Len(.Value) = Largo Then Exit Sub
Comb = 2
For Col = .Column To .Column + Comb
AnchoTotal = AnchoTotal + Cells(.Row, Col).ColumnWidth
Next
AnchoCelda = .ColumnWidth
.MergeCells = False
.ColumnWidth = AnchoTotal
.EntireRow.AutoFit
Alto = .RowHeight
With .Resize(, Comb + 1)
.Merge
.Columns(1).ColumnWidth = AnchoCelda
.EntireRow.RowHeight = Alto
End With
Largo = Len(.Value)
End With
End Sub


Respuesta Responder a este mensaje
#5 Héctor Miguel
22/07/2005 - 06:46 | Informe spam
hola, javi !

... el modelo no es muy complejo: una hoja de ofertas de productos... columna B... codigos, en la C... una funcion de busqueda
... dependiendo del proveedor - el codigo... en... A14, un numero- y del codigo
... aplicar... para todas las celdas de las descripciones... inicialmente hay 20... puede haber mas



=> para esta 'primera' parte... hay una 'propuesta' al final de este mensaje :D

... se puede hacer que un grupo de celdas vayan juntas en la misma pagina a la hora de imprimirse?
... las celdas del final de la Oferta, las que incluyen los totales, impuestos, condiciones de envio,...



=> esta 'segunda' parte [me temo que]... no me ha quedado 'muy clara' [que digamos] :-((
[creo que] necesitaras ser mas 'detalladamente explicito' :))

si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
=> estoy suponiendo que el numero del proveedor [en la celda 'A14'] es el # de columna que buscarv 'se trae' de la tabla -?-
y que las [primeras] celdas [segun el ejemplo] con los codigos son el rango 'B16:B21' <= cambia donde corresponda :D
tambien he optado por hacer una 'separacion' entre el codigo del evento '_change' y el codigo que 'ajusta' las celdas combinadas :))
en el modulo de codigo de 'esa' hoja ==Private Sub Worksheet_Change(ByVal Target As Range)
Application.ScreenUpdating = False
Dim General As String, Parcial As String
General = "a14"
Parcial = "b16:b21"
If Intersect(Target, Range(General & "," & Parcial)) Is Nothing Then Exit Sub
If Not Intersect(Target, Range(General)) Is Nothing _
Then ReajusteDeCeldas Range(Parcial) _
Else ReajusteDeCeldas Intersect(Target, Range(Parcial))
End Sub
Private Sub ReajusteDeCeldas(ByVal Rango As Range)
Dim Celda As Range, AnchoTotal As Single, AnchoCelda As Single, _
Alto As Single, Comb As Byte, Col As Byte
For Each Celda In Rango.Offset(, 1)
With Celda
AnchoTotal = 0
Comb = .MergeArea.Columns.Count
For Col = .Column To .Column + Comb - 1
AnchoTotal = AnchoTotal + .Columns(Col).ColumnWidth + 1
Next
AnchoCelda = .ColumnWidth
.UnMerge
.ColumnWidth = AnchoTotal
.EntireRow.AutoFit
Alto = .RowHeight
With .Resize(, Comb)
.Merge
.Columns(1).ColumnWidth = AnchoCelda
End With
.EntireRow.RowHeight = Alto
End With
Next
End Sub
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida