Una de las tareas que más dificultad presenta en Excel es la de ajustar
el alto de fila según datos ingresados. En especial si se trata de
celdas combinadas.
Son muchas las situaciones que pueden presentarse ….. trataré de ejemplificar la mayor cantidad de casos posibles, ya sea que se trabaje con una columna única o columnas combinadas.
En estos VIDEO 1 y VIDEO 3 se muestra la ejecución de todos los casos que a continuación resumo:
a- Tabla de datos donde una columna x debe ser autoajustada para mostrar todo el texto en una fila. La columna tendrá activada su propiedad Ajustar Texto. De ese modo al escribir en una celda de esa columna elegida automáticamente se autoajustará el alto de fila.
b- Tabla de datos con columnas combinadas. El alto de las filas se autoajusta mediante código que se coloca en el objeto HOJA donde se trabajará.
Son muchas las situaciones que pueden presentarse ….. trataré de ejemplificar la mayor cantidad de casos posibles, ya sea que se trabaje con una columna única o columnas combinadas.
En estos VIDEO 1 y VIDEO 3 se muestra la ejecución de todos los casos que a continuación resumo:
a- Tabla de datos donde una columna x debe ser autoajustada para mostrar todo el texto en una fila. La columna tendrá activada su propiedad Ajustar Texto. De ese modo al escribir en una celda de esa columna elegida automáticamente se autoajustará el alto de fila.
b- Tabla de datos con columnas combinadas. El alto de las filas se autoajusta mediante código que se coloca en el objeto HOJA donde se trabajará.
Private Sub Worksheet_Change(ByVal Target As Range)'se controla lo ingresado en celdas D:E, a partir de fila 3If Intersect(Target, Range("D:E")) Is Nothing Then Exit SubIf Target.Row < 3 Then Exit Sub'autoajuste celda en col D:Efily = Target.Row'ancho de columnas combinadasanchocol = Range("D" & fily).ColumnWidth + Range("E" & fily).ColumnWidth'alto normal de la filaalto = 15'se evalúa cuántos saltos de renglón existen en textoSet c = Range("D" & fily)saltos = Len(c) - Len(Application.WorksheetFunction.Substitute(c, Chr(10), vbNullString))'si no hay saltos de renglón utiliza un método de cálculo, sino otroIf saltos = 0 Thenanchotexto = Len(Target.Text)If anchotexto <= anchocol ThenTarget.RowHeight = 15Exit SubEnd Ifdif = (anchotexto - anchocol) / anchocolIf Round(dif) < 2 And anchotexto > anchocol Thendify = 2ElseIf dif > Int(dif) Thendify = Round(dif) + 1Elsedify = Int(dif)End Ifcantfilas = alto * difyElse'evalua cuantos renglones utiliza el párrafoZ = 1: canti = 0For x = 1 To saltos + 1salto1 = InStr(Z, c, vbLf)If salto1 > anchoCol Thencanti = Int(salto1 / anchoCol) + cantiEnd IfZ = salto1Next xcantfilas = alto * (saltos + 1 + canti)End If'se asigna el alto obtenidoWith Range("D" & fily).RowHeight = cantfilas.WrapText = True.HorizontalAlignment = xlLeftEnd WithEnd Sub
c- Datos obtenidos desde un formulario o Userform. Nuevamente aquí ya podemos dejar asignada la propiedad Ajustar Texto en la columna de Descripción.
Range("D" & fily).WrapText = True
d- Datos obtenidos desde un formulario o Userform, desde un control con varias líneas.
En primer lugar, se ajustará la propiedad MultiLine en True para el control que recibirá el texto.
Para pasar al renglón siguiente al momento de introducir el texto, se
presionarán juntas las teclas Mayúsc + Enter.
Al realizar el guardado, la instrucción indicará que se trata de una celda con Ajuste de texto tal como hemos visto en el punto anterior, con la instrucción:
Range("D" & fily).WrapText = True
e- Celdas combinadas.
Al igual que en los ejemplos anteriores, podemos trabajar con un campo
textbox de una sola fila (sin saltos de renglón) o en modo columna.
En este ejemplo contamos con columnas combinadas (D:E) para contener el texto de la Descripción. Y el control textbox del formulario tendrá su propiedad MultiLine en True.
En este ejemplo contamos con columnas combinadas (D:E) para contener el texto de la Descripción. Y el control textbox del formulario tendrá su propiedad MultiLine en True.
La diferencia en el código tratándose de celdas combinadas, es que aquí se necesita calcular cuántas filas son necesarias para mostrar el texto completo considerando el total de columnas utilizadas para el texto. En el ejemplo utilizamos las columnas D:E
'ancho de columnas combinadas
anchoCol = Range("D" & fily).ColumnWidth + Range("E" &
fily).ColumnWidth
Las instrucciones para pasar a la hoja el campo Descripción y llamar a
la macro que calcula filas necesarias, serán las siguientes:
Range("D" & fily) = TextBox6 'descripción
'autoajuste celda en col D:E
Call calcula_AltoFila
Y en un módulo dentro del mismo formulario se encontrará la subrutina.
Sub calcula_AltoFila()
‘instrucciones
End Sub
NOTA: la variable fily que se utiliza en las 2 subrutinas debe estar declarada al inicio del formulario o Userform con esta instrucción:
Dim fily As Long
Por último, solo quedaría agregar una instrucción para que los textos de toda la fila ajustada se presenten de modo centrado, con esta instrucción que se agrega al botón de guardado (ACEPTAR) al finalizar todo el pase de datos:
Range("D" & fily) = TextBox6 'descripción
'autoajuste celda en col D:E
Call calcula_AltoFila
Y en un módulo dentro del mismo formulario se encontrará la subrutina.
Sub calcula_AltoFila()
‘instrucciones
End Sub
NOTA: la variable fily que se utiliza en las 2 subrutinas debe estar declarada al inicio del formulario o Userform con esta instrucción:
Dim fily As Long
Por último, solo quedaría agregar una instrucción para que los textos de toda la fila ajustada se presenten de modo centrado, con esta instrucción que se agrega al botón de guardado (ACEPTAR) al finalizar todo el pase de datos:
Range("A" & fily).EntireRow.VerticalAlignment = xlCenter
Acceso a videos: VIDEO 1 VIDEO 3
No hay comentarios.:
Publicar un comentario