Hier unser Quellcode für das Problem:
' wenn keine Spalte angebeben, werden die Spalten anhand ihres Inhaltes und der
' Überschrift angepasst
' wenn eine Spalte oder mehrere (durch Komma getrennt) übergeben werden, dann
' wird der verbleibende
' Platz auf diese Spalten aufgeteilt; alle anderen Spalten bleiben unverändert
Public Sub sevGridSpaltenbreiteAnGridAnpassen(ByVal Grid As sevGrid, Optional _
ByVal Spalte, _
Optional ByVal _
MindestSpaltenbreite As Long = _
1000, _
Optional ByVal _
ZeilenFürSpaltenbreitenanpassung _
As Integer = 30)
Dim w As Long
Dim i As Integer
Dim j As Integer
Dim Spaltenanzahl As Integer
Dim Spalten() As String
Dim Breite As Long
Dim Key
w = 0
Grid.LockUpdate True
If Not IsMissing(Spalte) Then
Spalten = Split(Spalte, ",")
Spaltenanzahl = UBound(Spalten) + 1
For i = 1 To Grid.Cols
If Grid.Columns(i).visible Then
w = w + Grid.Columns(i).Width
End If
Next
For Each Key In Spalten
If Not Grid.Columns(Key) Is Nothing Then
If Grid.Columns(Key).visible Then
w = w - Grid.Columns(Key).Width
Else
Spaltenanzahl = Spaltenanzahl - 1
End If
End If
Next
If Grid.ScrollBars = SB_VERTICAL Or Grid.ScrollBars = SB_BOTH Or _
(Grid.ScrollBars = SB_AUTO And Grid.Rows >= Grid.ScreenRows) Then
w = w + 20 * Screen.TwipsPerPixelX
Else
w = w + 4 * Screen.TwipsPerPixelX
End If
If Grid.FixedCol Then
w = w + Grid.FixedColCount * Grid.FixedColWidth
End If
For Each Key In Split(Spalte, ",")
If Not Grid.Columns(Key) Is Nothing Then
If Grid.Columns(Key).visible Then
Breite = Int((Grid.Width - w) / Spaltenanzahl)
If Breite < MindestSpaltenbreite Then
Grid.Columns(Key).Width = MindestSpaltenbreite
Else
Grid.Columns(Key).Width = Breite
End If
w = w + Grid.Columns(Key).Width
Spaltenanzahl = Spaltenanzahl - 1
End If
End If
Next
Else
With Grid
For i = 1 To .Cols
If .Columns(i).visible Then
On Error Resume Next
w = Max(MindestSpaltenbreite, Grid.Parent.TextWidth(.Columns( _
i).Caption))
For j = 1 To Min(.Rows, IIf(ZeilenFürSpaltenbreitenanpassung = _
0, .Rows, ZeilenFürSpaltenbreitenanpassung))
w = Max(Grid.Parent.TextWidth(.Text(j, i)), w)
Next
On Error GoTo 0
.Columns(i).Width = w + 10 * Screen.TwipsPerPixelX
End If
Next
End With
End If
Grid.LockUpdate False
Grid.RefreshEx
End Sub Public Function Max(Wert1, Wert2) As Variant
If Wert1 > Wert2 Then Max = Wert1 Else Max = Wert2
End Function
Public Function Min(Wert1, Wert2) As Variant
If Wert1 > Wert2 Then min = Wert2 Else min = Wert1
End Function
Beitrag wurde zuletzt am 21.04.16 um 10:54:07 editiert. |