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

#6 javi
26/07/2005 - 02:30 | Informe spam
Hola Héctor M.

La propuesta funcina bien en una celda, he estado intentando que
funcionara para toda la columna C (C, D y E combinadas) y he puesto las
siguientes modificaciones:


Private Sub Worksheet_Change(ByVal Target As Range)
'Application.ScreenUpdating = False
Dim General As String, Parcial As String
General = "b15:" & Range("Oferta.subtotal").Offset(-1, -7).Address
Parcial = "c15:" & Range("Oferta.subtotal").Offset(-1, -7).Address
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
If Celda.Column <> 3 Then ????
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


En principio funcionaba mal, porque en el bucle With Celda al dar la
segunda pasada descombina las celdas y combina las columnas 4,5 y 6 (en
lugar de 3,4 y 5). Por eso probé a poner un código que haga que si la
celda no es de la columna 3 salga del WITH y pase al siguiente elemento.

El caso es que eso no consigo hacerlo, si le pongo un EXIT SUB sólo me
ajusta la celda C15 sea cual sea la celda activa.



La cuestión que no he explicado bien es la siguiente ¿se puede hacer que
las celdas A37:I41 se impriman siempre juntas?, es decir si el documento
se va a partir en la fila 39 para imprimirse en dos páginas, hacer que
ese bloque siempre se imprima en la siguiente página pero completom(algo
parecido a lo que se hace en word al pedir que el párrafo mantenga las
líneas juntas y no se divida en dos páginas formato-parrafo-líneas y
saltos de página-conservar líneas juntas).

Gracias de nuevo



Héctor Miguel escribió:
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
#7 Héctor Miguel
26/07/2005 - 05:59 | Informe spam
hola, javi !

... funciona bien en una celda... intentando que funcionara para toda la columna C (C, D y E combinadas)
... he puesto las siguientes modificaciones [...]
... funcionaba mal... en el bucle With Celda... la segunda pasada descombina... y combina las columnas 4,5 y 6 (en lugar de 3,4 y 5)
... probe a poner un codigo que haga que si la celda no es de la columna 3 salga del WITH y pase al siguiente elemento.
... eso no consigo hacerlo, si le pongo un EXIT SUB solo me ajusta la celda C15 sea cual sea la celda activa.



para esta 'primera parte' [parece que] se trata de una 'mezcla de supuestos' [entre mios y tuyos] que [mas que ayudar]...
esta cuasando que te provoque algunas confusiones :-( [p.e.]
-> el uso 'entendido' [que yo les aplique] de las variables 'General' y 'Parcial'
a) 'General' asumia que la celda 'B14' contenia el codigo de algun proveedor y que podria ocasionar cambios 'generales' en...
b) 'Parcial' asumia que el rango 'B15:B_n' contenia el codigo de cada articulo
-> de lo anterior... mis supuestos [complementarios] eran que el rango de celdas con columnas combinadas [adyacentes a 'B']
es C15:C_n siendo 'n' el mismo numero de fila que exista en 'B'

-> los primeros cambios que haces al codigo [por los que deja de trabajar 'como fue pensado'] son...
1) extiendes/amplias/redimensionas/... la variable 'General' [que se esperaba de UNA SOLA CELDA en 'B14' - codigo_proveedor]
[y que -yo- suponia tambien que significaba el numero de columna_a_devolver para la funcion BuscarV]
hasta donde queda [supongo] la ultima fila 'ocupada' [una fila antes y 7 columnas 'atras' del rango_nombre: 'Oferta.subtotal'] -?-
2) utiizas ESA MISMA direccion para 'extender' el rango de celdas combinadas [y una de las dos variables queda de 2 columnas] :(
-> [segun 'mis' supuestos originales]... NO es necesario que el codigo 'sepa' si la columna_ajustable es la 3 o... :))
[de hecho]... las celdas que se ajustan... las 'toma' a la derecha del rango/variable 'Parcial' [B15:B_n]
[incluso]... es 'capaz' de detectar si las columnas 'combinadas' [por cada 'Celda'] son dos, tres, o 'n' ['ve' la variable: 'Comb'] ;)
-> [en fin]... creo que mis 'intentos' por explicar los supuestos empleados [cuando 'me veo en la necesidad' de suponer]...
resultan [mas bien] complejos y enredosos... que 'ilustrativos' :-( [disculpa si es el caso] :DD

... se puede hacer que las celdas A37:I41 se impriman siempre juntas?
... si el documento se va a partir en la fila 39 para imprimirse en dos paginas
... que ese bloque siempre se imprima en la siguiente pagina pero completo
... parecido a lo que se hace en word... que el parrafo mantenga las lineas juntas y no se divida en dos [...]



para esta segunda parte... [hasta donde se] se podria hacer...
a) usando macros para 'detectar' si habra un salto de pagina que divida a ese bloque... o...
b) [probablemente] usando nombres con referencia a rangos 'dinamicos' [aunque este truco no te lo puedo asegurar sin antes...]
-> para ambos casos, se necesitaria conocer [con anticipacion] algunas variables que podrian 'influir' en el proceso
[o hacer codigo que 'las busque', con lo que las macros -definitivamente- NO seran -muy- 'delgadas'] :DD

no se si te estoy complicando mucho :-( [de cualquier modo]...
si cualquier duda [o informacion adicional]... comentas?
saludos,
hector.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida