Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ListView Spaltenbreite

ListView Spaltenbreite
17.05.2005 11:38:28
Heiko
Hallo Forum,
ich probiere gerade mit dem ListView Steuerelement rum. Dazu habe ich folgenden
Test Code.

Private Sub UserForm_Initialize()
Dim intI%
With ListView1
.Width = 260
.ColumnHeaders.Add , , "Test 1", 80
.ColumnHeaders.Add , , "Test 2", 80
.ColumnHeaders.Add , , "Test 3", 80
.View = 3
For intI = 1 To 10
.ListItems.Add , , "Name " & CStr(intI)
.ListItems(intI).SubItems(1) = CStr(ActiveSheet.Range("A" & intI))
.ListItems(intI).SubItems(2) = CStr(ActiveSheet.Range("B" & intI))
Next intI
End With
End Sub

Klappt auch alles wunderbar, nur eine Frage habe ich dazu.
Kann man Listview irgendwie so einstellen, das per Maus die Spaltenbreite am Header NICHT verändert werden kann?
Danke für eure Bemühnungen und Tipps.
Gruß Heiko
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListView Spaltenbreite
17.05.2005 17:13:32
Reinhard
Hallo Heiko,
ich kann dir nicht helfen deshalb Frage noch offen, ich kann die nur sagen was nicht ging *g
Gruß
Reinhard

Private Sub ListView1_AfterLabelEdit(Cancel As Integer, NewString As String)
With ListView1
.ColumnHeaders.Item(1).Width = 80
End With
End Sub


Private Sub ListView1_BeforeLabelEdit(Cancel As Integer)
With ListView1
.ColumnHeaders.Item(1).Width = 80
End With
End Sub

Sub tt()
With ListView1
.ColumnHeaders.Item(1).Width = 80
End With
End Sub

Private Sub ListView1_Click()
With ListView1
.ColumnHeaders.Item(1).Width = 80
End With
End Sub


Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
With ListView1
.ColumnHeaders.Item(1).Width = 80
End With
End Sub


Private Sub ListView1_OLECompleteDrag(Effect As Long)
With ListView1
.ColumnHeaders.Item(1).Width = 80
End With
End Sub

Anzeige
AW: ListView Spaltenbreite
17.05.2005 20:17:28
Heiko
Hallo Reinhard,
das ist doch auch schon mal ein Tipp, sowas hatte ich mir für den Fall überlegt wenn es keinen einfachen Befehl gibt. Aber wie ich sehe ist das wohl auch keine Lösung.
Trotzdem danke , spart mir Zeit die ich sonst zum ausprobieren gebraucht hätte.
Vielleicht hat ja noch jemand ne Idee, darum Frage weiterhin offen.
Gruß Heiko
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

ListView Spaltenbreite in Excel VBA anpassen


Schritt-für-Schritt-Anleitung

Um die Spaltenbreite in einem ListView-Steuerelement in Excel VBA festzulegen und zu verhindern, dass Benutzer die Breite per Maus ändern, kannst du folgende Schritte ausführen:

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Füge ein UserForm hinzu und füge das ListView-Steuerelement hinzu.
  3. Füge den folgenden Code in das UserForm ein:
Private Sub UserForm_Initialize()
    Dim intI%
    With ListView1
        .Width = 260
        .ColumnHeaders.Add , , "Test 1", 80
        .ColumnHeaders.Add , , "Test 2", 80
        .ColumnHeaders.Add , , "Test 3", 80
        .View = 3
        For intI = 1 To 10
            .ListItems.Add , , "Name " & CStr(intI)
            .ListItems(intI).SubItems(1) = CStr(ActiveSheet.Range("A" & intI))
            .ListItems(intI).SubItems(2) = CStr(ActiveSheet.Range("B" & intI))
        Next intI
    End With
End Sub
  1. Verhindere das Ändern der Spaltenbreite durch Hinzufügen der folgenden Subs:
Private Sub ListView1_AfterLabelEdit(Cancel As Integer, NewString As String)
    FixColumnWidth
End Sub

Private Sub ListView1_BeforeLabelEdit(Cancel As Integer)
    FixColumnWidth
End Sub

Private Sub ListView1_Click()
    FixColumnWidth
End Sub

Private Sub ListView1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As stdole.OLE_XPOS_PIXELS, ByVal y As stdole.OLE_YPOS_PIXELS)
    FixColumnWidth
End Sub

Private Sub ListView1_OLECompleteDrag(Effect As Long)
    FixColumnWidth
End Sub

Private Sub FixColumnWidth()
    With ListView1
        .ColumnHeaders.Item(1).Width = 80
        .ColumnHeaders.Item(2).Width = 80
        .ColumnHeaders.Item(3).Width = 80
    End With
End Sub

Häufige Fehler und Lösungen

  • Fehler: Die Spaltenbreite wird nach dem Ändern der Größe zurückgesetzt.

    • Lösung: Stelle sicher, dass der Code in den entsprechenden Ereignissen des ListView-Steuerelements platziert ist. Verwende die FixColumnWidth-Subroutine, um die Breiten nach jeder Änderung zurückzusetzen.
  • Fehler: Das ListView wird nicht korrekt angezeigt.

    • Lösung: Überprüfe, ob die View-Eigenschaft auf 3 (Report) gesetzt ist und dass die Spaltenbreiten korrekt initialisiert werden.

Alternative Methoden

Eine andere Möglichkeit, die Spaltenbreite zu fixieren, besteht darin, die ListView-Steuerelemente in einem ActiveX-Steuerelement auf einem Arbeitsblatt zu verwenden. Du kannst das Steuerelement ebenfalls per VBA anpassen, um die Breiten zu fixieren.

Zudem könntest du in Betracht ziehen, ein DataGridView-Steuerelement zu verwenden, wenn du mit UserForms arbeitest, da dieses mehr Flexibilität in Bezug auf das Layout bietet.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die Daten aus einem Arbeitsblatt in ein ListView laden kannst:

Private Sub UserForm_Initialize()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Daten") ' Datenblatt benennen

    With ListView1
        .Width = 260
        .ColumnHeaders.Add , , "Name", 100
        .ColumnHeaders.Add , , "Wert", 100

        Dim i As Integer
        For i = 1 To 10
            .ListItems.Add , , ws.Cells(i, 1).Value
            .ListItems(i).SubItems(1) = ws.Cells(i, 2).Value
        Next i
    End With
End Sub

Tipps für Profis

  • Nutzung von Konstanten: Verwende Konstanten für die Spaltenbreiten, um den Code lesbarer zu machen.

  • Optimierung: Vermeide unnötige Wiederholungen im Code, indem du die Spaltenbreiten in einer Schleife festlegst.

  • Debugging: Nutze die Debugging-Tools in VBA, um schnell Fehler zu identifizieren, besonders wenn es um die Anzeige von ListViews geht.


FAQ: Häufige Fragen

1. Kann ich die Spaltenbreite dynamisch anpassen?
Ja, du kannst die Breite der Spalten basierend auf dem Inhalt dynamisch anpassen, indem du die .Width-Eigenschaft für jede Spalte im AfterUpdate-Ereignis anpasst.

2. Ist das ListView-Steuerelement in allen Excel-Versionen verfügbar?
Das ListView-Steuerelement ist in Excel 2000 und späteren Versionen verfügbar. Achte darauf, dass du die entsprechenden Bibliotheken aktiviert hast.

3. Wie kann ich die ListView in einem Arbeitsblatt verwenden?
Du kannst das ListView-Steuerelement als ActiveX-Steuerelement auf einem Arbeitsblatt hinzufügen. Der Code bleibt ähnlich, aber die Initialisierung erfolgt direkt im Arbeitsblattmodul.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige