Autoajustar altura de fila
Tengo una serie de colunnas combinadas y me gustaría saber la forma de que automáticamente me ajuste el alto de las filas pues las tengo confirugada para que me ajuste el texto en varias lineas pero sin embargo en las celdas combinadas no me funciona
1 respuesta
Respuesta de jerryeagle
1
1
Comoseguido he dicho, usar la grabadora de macros ayuda mucho a saber como se hacen ciertas cosas, usa esta linea:
Activecell. EntireRow. AutoFit
Activecell. EntireRow. AutoFit
Ante todo gracias por tu ayuda, pero resulta que por algún motivo, sospecho que sera que son celdas combinadas, cuando ejecuto el programa, no me auto ajusta la altura de las filas.
Te pongo aquí esa parte del código por si encuentras que hago mal y me puedes ayudar:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub CommandButton1_Click()
Worksheets("FACTURA").Activate
Range("e16").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
For n = 0 To ListBox5.ListCount - 1
ListBox5.ListIndex = n
ListBox8.ListIndex = n
ActiveCell = ListBox5.List(ListBox5.ListIndex)
ActiveCell.EntireRow.AutoFit 'es aqui donde se debe de ajustar la altura de fila
ActiveCell.Offset(0, 3).Select
If ListBox8.ListIndex = -1 Then
ListBox8.ListIndex = "0"
ActiveCell = ListBox8.List(ListBox8.ListIndex)
Else
ActiveCell = ListBox8.List(ListBox8.ListIndex)
End If
...............
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
el codigo es mas extenso aunque esa es la parte referente al ajuste de las filas
"""TE RECUERDO QUE SON CELDAS COMBINADAS"""
Se me ocurrió que podría contar el largo del texto, dividirlo entre el largo de caracteres por linea y mediante la propiedad "row.height" ajustar la altura, y cree este código:
''''''''''''''''''''''''''''''''''
L = Len(ActiveCell.Text)
X = L / 33
V = X * 20
ActiveCell.RowHeight = V
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Pero tampoco me funciono, (quizás sea que tenga que añadir algo más)
Nuevamente gracias por tu ayuda
Te pongo aquí esa parte del código por si encuentras que hago mal y me puedes ayudar:
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub CommandButton1_Click()
Worksheets("FACTURA").Activate
Range("e16").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
For n = 0 To ListBox5.ListCount - 1
ListBox5.ListIndex = n
ListBox8.ListIndex = n
ActiveCell = ListBox5.List(ListBox5.ListIndex)
ActiveCell.EntireRow.AutoFit 'es aqui donde se debe de ajustar la altura de fila
ActiveCell.Offset(0, 3).Select
If ListBox8.ListIndex = -1 Then
ListBox8.ListIndex = "0"
ActiveCell = ListBox8.List(ListBox8.ListIndex)
Else
ActiveCell = ListBox8.List(ListBox8.ListIndex)
End If
...............
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
el codigo es mas extenso aunque esa es la parte referente al ajuste de las filas
"""TE RECUERDO QUE SON CELDAS COMBINADAS"""
Se me ocurrió que podría contar el largo del texto, dividirlo entre el largo de caracteres por linea y mediante la propiedad "row.height" ajustar la altura, y cree este código:
''''''''''''''''''''''''''''''''''
L = Len(ActiveCell.Text)
X = L / 33
V = X * 20
ActiveCell.RowHeight = V
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Pero tampoco me funciono, (quizás sea que tenga que añadir algo más)
Nuevamente gracias por tu ayuda
Cierto por alguna razón cuando están combinadas las celdas, no funciona correctamente, usa este código y creo que te debe funcionar sin importar el No. de caracteres de la celda:
H = ActiveCell.Height
L = Len(ActiveCell)
ActiveCell.RowHeight = H * ((L / H) / 2)
H = ActiveCell.Height
L = Len(ActiveCell)
ActiveCell.RowHeight = H * ((L / H) / 2)
Saludos nuevamente, he copiado y pegado el código que me facilitas tal cual y sigue sin funcionarme :(
(Quizás sea porque la propiedad row.height es una propiedad de solo lectura según la msdn)
No se me ocurre de que otra manera podría solucionarlo, espero puedas ayudarme
nuevamente gracias.
(Quizás sea porque la propiedad row.height es una propiedad de solo lectura según la msdn)
No se me ocurre de que otra manera podría solucionarlo, espero puedas ayudarme
nuevamente gracias.
Nuevamente saludos, en esta ocacíon escribo para comentar que lo he resuelto, en vista de que según estuve investigando y comprobando, no era posible ajutar el alto de una celda si esta forma parte de una combinación de celdas o bien si esta no se encuentra en la columna "A" decidí adaptar parte delc código para que se cumplieran esas dos condiciones.
Como expuse más ariba tenia este código :
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub CommandButton1_Click()
Worksheets("FACTURA").Activate
Range("e16").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
For n = 0 To ListBox5.ListCount - 1
ListBox5.ListIndex = n
ListBox8.ListIndex = n
ActiveCell = ListBox5.List(ListBox5.ListIndex)
'es aqui donde se debe de ajustar la altura de fila
ActiveCell.Offset(0, 3).Select
If ListBox8.ListIndex = -1 Then
ListBox8.ListIndex = "0"
ActiveCell = ListBox8.List(ListBox8.ListIndex)
Else
ActiveCell = ListBox8.List(ListBox8.ListIndex)
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Y disponía de las opciones " ActiveCell.EntireRow.AutoFit" o bien usando las variables y ajustando la propiedad "activecell.rowheight" aunque ninguna de las dos opciones funciono aplicándolas a esa celda.
como lo solucione?
Adapte el código de la siguiente manera, para que al llegar a la celda donde hay que ajustar la altira de fila fuese a la columna "A", hiciera los cambios, los borrase y volviera a la columna "E" dejando así la altura de fila ajustada.
el código es el siguiente:
Worksheets("FACTURA").Activate
Range("e16").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
For n = 0 To ListBox5.ListCount - 1
ListBox5.ListIndex = n
ListBox8.ListIndex = n
ActiveCell = ListBox5.List(ListBox5.ListIndex)
H = ActiveCell.Height 'variable en la que almaceno la altura actual de la celda activa
L = Len(ActiveCell) ' variable en la que almaceno el tamaño del texto de dicha celda
ActiveCell.Offset(0, -4).Select ' retrocedo 4 colunnas a la izquierda
'para llegar a la colunna "A"
If L > 33 Then 'me aseguro de que el tamaño de "L"
'sea mayor del numero maximo de caracteres visibles de la celda
'y en la colunna "A" ejecuto la orden de ajuste del alto de celda.
ActiveCell = ListBox5.List(ListBox5.ListIndex)
ActiveCell.RowHeight = H * ((L / H) / 2)
ActiveCell.Offset(0, 2).Select' aqui avanzo solo 2 colunnas pues la formula anterior me deja una linea debajo del texto
'desajustando la alineacion del resto de la fila.
ActiveCell = "T.P." 'al escribir en la celda activa consigo alinear la fila, destacando de la colunna "E"
ActiveCell. Offset(0, 2). Select 'avanzo 2 colunnas mas quedandome otra vez en la colunna "E"
Else ' en el caso de que "L" sea menor de 33
ActiveCell.Offset(0, 2).Select 'avanzo 2
ActiveCell. Offset(0, 2). Select ' y 2 mas, por algun motivo si le digo que avance 4 no me iva bien y decidi hacerlo de ese modo.
End If
ActiveCell.Offset(0, 3).Select
If ListBox8.ListIndex = -1 Then
ListBox8.ListIndex = "0"
ActiveCell = ListBox8.List(ListBox8.ListIndex)
Else
ActiveCell = ListBox8.List(ListBox8.ListIndex)
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Y ese es el código tal y como esta ahora, el cual me funciona perfectamente, aclaro que solo es parte del código de todo el formulario de facturación que ando diseñando.
Nuevamente muchas gracias por su ayuda y espero esta solución le sea de utilidad a alguien más
Como expuse más ariba tenia este código :
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub CommandButton1_Click()
Worksheets("FACTURA").Activate
Range("e16").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
For n = 0 To ListBox5.ListCount - 1
ListBox5.ListIndex = n
ListBox8.ListIndex = n
ActiveCell = ListBox5.List(ListBox5.ListIndex)
'es aqui donde se debe de ajustar la altura de fila
ActiveCell.Offset(0, 3).Select
If ListBox8.ListIndex = -1 Then
ListBox8.ListIndex = "0"
ActiveCell = ListBox8.List(ListBox8.ListIndex)
Else
ActiveCell = ListBox8.List(ListBox8.ListIndex)
End If
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Y disponía de las opciones " ActiveCell.EntireRow.AutoFit" o bien usando las variables y ajustando la propiedad "activecell.rowheight" aunque ninguna de las dos opciones funciono aplicándolas a esa celda.
como lo solucione?
Adapte el código de la siguiente manera, para que al llegar a la celda donde hay que ajustar la altira de fila fuese a la columna "A", hiciera los cambios, los borrase y volviera a la columna "E" dejando así la altura de fila ajustada.
el código es el siguiente:
Worksheets("FACTURA").Activate
Range("e16").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop
For n = 0 To ListBox5.ListCount - 1
ListBox5.ListIndex = n
ListBox8.ListIndex = n
ActiveCell = ListBox5.List(ListBox5.ListIndex)
H = ActiveCell.Height 'variable en la que almaceno la altura actual de la celda activa
L = Len(ActiveCell) ' variable en la que almaceno el tamaño del texto de dicha celda
ActiveCell.Offset(0, -4).Select ' retrocedo 4 colunnas a la izquierda
'para llegar a la colunna "A"
If L > 33 Then 'me aseguro de que el tamaño de "L"
'sea mayor del numero maximo de caracteres visibles de la celda
'y en la colunna "A" ejecuto la orden de ajuste del alto de celda.
ActiveCell = ListBox5.List(ListBox5.ListIndex)
ActiveCell.RowHeight = H * ((L / H) / 2)
ActiveCell.Offset(0, 2).Select' aqui avanzo solo 2 colunnas pues la formula anterior me deja una linea debajo del texto
'desajustando la alineacion del resto de la fila.
ActiveCell = "T.P." 'al escribir en la celda activa consigo alinear la fila, destacando de la colunna "E"
ActiveCell. Offset(0, 2). Select 'avanzo 2 colunnas mas quedandome otra vez en la colunna "E"
Else ' en el caso de que "L" sea menor de 33
ActiveCell.Offset(0, 2).Select 'avanzo 2
ActiveCell. Offset(0, 2). Select ' y 2 mas, por algun motivo si le digo que avance 4 no me iva bien y decidi hacerlo de ese modo.
End If
ActiveCell.Offset(0, 3).Select
If ListBox8.ListIndex = -1 Then
ListBox8.ListIndex = "0"
ActiveCell = ListBox8.List(ListBox8.ListIndex)
Else
ActiveCell = ListBox8.List(ListBox8.ListIndex)
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Y ese es el código tal y como esta ahora, el cual me funciona perfectamente, aclaro que solo es parte del código de todo el formulario de facturación que ando diseñando.
Nuevamente muchas gracias por su ayuda y espero esta solución le sea de utilidad a alguien más
- Compartir respuesta
- Anónimo
ahora mismo