Muy buen ejemplo, me sirvio de mucho, sin embargo le hice algunas modificaciones para que sea mas interactivo:
- Cambie parametro por uno de tipo MSHFlexgrid aunque funciona con ambos
- Dos parametros mas para indicar donde va el ajuste (Columnas o renglones)
- Ajusta tanto columnas como renglones
Entonces quedó así:
Código:
'Recibe de parametros:
' Object: Con esto se debera entender que puede ser un MSFlexGrid o un MSHFlexGrid
' AjustarColumnas: Para indicar si requiere ajuste de columnas (Si se omite se da por hecho que requieran ajuste)
' AjustarRenglones: Para indicar si requiere ajuste de renglones (Si se omite se da por hecho que requieran ajuste)
Public Sub AjustaColumnas(Rejilla As MSHFlexGrid, Optional AjustarColumnas As Boolean = True, Optional AjustarRenglones As Boolean = True)
Dim oldFont As StdFont, oldScale As Integer
Dim AnchoText As Single, AnchoMax As Single, AltoMax As Single
Dim c As Integer, r As Long
Dim margenArriba_Abajo As int, margenDerecha_Izquierda As Int
margenArriba_Abajo = 100 'Modificar valores
margenDerecha_Izquierda = 250 'Modificar valores
With Rejilla
Set oldFont = Me.Font
Set Me.Font = .Font
oldScale = Me.ScaleMode
Me.ScaleMode = vbTwips
'Primero: las columnas
'AnchoMax = Me.TextWidth(.TextMatrix(0, 0))
If AjustarColumnas Then
AnchoMax = Me.TextWidth(.TextMatrix(0, c)) + margenDerecha_Izquierda
For c = 0 To .Cols - 1
For r = 0 To .Rows - 1
AnchoText = Me.TextWidth(Trim(.TextMatrix(r, c))) + margenDerecha_Izquierda
If AnchoText > AnchoMax Then AnchoMax = AnchoText
Next r
.ColWidth(c) = AnchoMax
Next c
End If
'Segundo: los renglones
If AjustarRenglones Then
For r = o To .Rows - 1
AltoMax = Me.TextHeight(Trim(.TextMatrix(r, 0))) + margenArriba_Abajo
For c = 0 To .Cols - 1
AltoText = Me.TextHeight(.TextMatrix(r, c)) + margenArriba_Abajo
If AltoText > AltoMax Then AltoMax = AltoText
Next c
.RowHeight(r) = AltoMax
Next r
End If
Set Me.Font = oldFont
Me.ScaleMode = oldScale
.Row = 0
End With
End Sub