Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: UF ListView Position

UF ListView Position
16.04.2019 04:53:07
Ludmila
Hallo,
in einer UF MultiPage habe ich 5 Pages in jeder Page sind ListView's.
Nun ist es so das es immer wieder passiert, das das ListView im Page links oben erscheint und somit alle anderen Steuerelemte überdeckt.
Beim 2.ten mal öffnen einer Seite ist das ListView an der richtigen Stelle.
Wad mache ich falsch?
Danke!
Gruß
Ludmila
Alle Seiten werden gleich geöffnet
With UF1
'Damit Change nicht ausgelöst wird
.Tag = "X"
'öffnet Page Miatarbeiter
.MP1.Pages(4).Visible = True
.MP1.Value = 4
.cmdExitUF.Caption = "zum Menu"
.lblArbTitel.Caption = "Zeiterfassung - Verwaltung"
'Steuerelemente leeren
For Each obj In .MP1.Pages(4).Controls
Select Case TypeName(obj)
Case "TextBox": obj.Value = ""
Case "ComboBox": obj.Clear: obj.Enabled = False
End Select
Next obj
'ListView beschriften
With .ListViewZeitMonat
.Left = 322
.Top = 18
.FullRowSelect = True
.ColumnHeaders.Clear
.ListItems.Clear
.Gridlines = True
.AllowColumnReorder = False
.View = 3
.ColumnHeaders.Add , , "Tag", 50: .ColumnHeaders(1).Alignment = lvwColumnLeft
.ColumnHeaders.Add , , "A/U/K", 30: .ColumnHeaders(2).Alignment = lvwColumnCenter
.ColumnHeaders.Add , , "Projekt 1", 150: .ColumnHeaders(3).Alignment = lvwColumnLeft
.ColumnHeaders.Add , , "Stunden", 50: .ColumnHeaders(4).Alignment = lvwColumnRight
.ColumnHeaders.Add , , "Projekt 2", 150: .ColumnHeaders(5).Alignment = lvwColumnLeft
.ColumnHeaders.Add , , "Stunden", 50: .ColumnHeaders(6).Alignment = lvwColumnRight
.ColumnHeaders.Add , , "Std./Tag", 60: .ColumnHeaders(7).Alignment = lvwColumnRight
.ColumnHeaders.Add , , "Vorschuß", 60: .ColumnHeaders(8).Alignment = lvwColumnRight
End With
'Steuerelemete einlesen
Hier werden Daten in ComboBoxen eingelesen
.Tag = ""
End with
End Sub
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: UF ListView Position
16.04.2019 09:38:43
Nepumuk
Hallo Ludmila,
das ist leider ein "normales" Verhalten von ListViews auf einem MultiPage-Control. Das einzige was hilft, beim Start des UserForms einmal alle Seiten aktivieren. Das kannst du so machen:
Option Explicit

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function LockWindowUpdate Lib "user32.dll" ( _
    ByVal hwndLock As LongPtr) As Long

Private Const GC_CLASSNAME_USERFORM = "ThunderDFrame"

Private Sub UserForm_Initialize()
    Dim lngptrHwnd As LongPtr
    Dim lngIndex As Long
    lngptrHwnd = FindWindowA(GC_CLASSNAME_USERFORM, Caption)
    Call LockWindowUpdate(lngptrHwnd)
    With MultiPage1
        For lngIndex = 0 To .Pages.Count - 1
            .Value = lngIndex
        Next
        .Value = 0
    End With
    Call LockWindowUpdate(0)
End Sub

Gruß
Nepumuk
Anzeige
AW: UF ListView Position
17.04.2019 03:22:49
Ludmila
Hallo Nepumuk,
leider funktioniert es nicht.
Ich mache es nun wie folgt
'öffnet Page Miatarbeiter
.MP1.Pages(4).Visible = True
.MP1.Value = 4
.MP1.Value = 0
.MP1.Value = 4
Danke klappt es.
Zwar umständlich aber..
Gruß
Ludmila
;
Anzeige
Anzeige

Infobox / Tutorial

Positionierung von ListView in Excel UserForms


Schritt-für-Schritt-Anleitung

Um die Position des ListView in einem UserForm mit MultiPage zu steuern, kannst du folgende Schritte ausführen:

  1. Initialisierung des UserForms: Stelle sicher, dass der UserForm beim Öffnen alle Seiten aktiviert. Das erreichst du, indem du in der UserForm_Initialize()-Subroutine alle Seiten der MultiPage durchgehst.

  2. ListView-Einstellungen: Füge die Spaltenüberschriften mit der Methode ColumnHeaders.Add hinzu. Beispiel:

    With ListViewZeitMonat
       .ColumnHeaders.Add , , "Tag", 50
       .ColumnHeaders.Add , , "A/U/K", 30
       ' Weitere Spalten hinzufügen
    End With
  3. Position des ListView festlegen: Setze die .Left und .Top Eigenschaften des ListView, um es an die gewünschte Position zu verschieben:

    .Left = 322
    .Top = 18
  4. Seitenwechsel: Wenn du die Seite im MultiPage wechselst, stelle sicher, dass der ListView an der richtigen Position bleibt, indem du die Sichtbarkeit der Seiten korrekt einstellst.


Häufige Fehler und Lösungen

  • ListView überdeckt andere Steuerelemente: Wenn das ListView beim ersten Öffnen einer Seite nicht korrekt positioniert ist, ist dies ein typisches Verhalten. Eine Lösung ist, alle Seiten beim Start des UserForms zu aktivieren, wie in der Schritt-für-Schritt-Anleitung beschrieben.

  • ListView wird nicht korrekt angezeigt: Manchmal kann es helfen, die Sichtbarkeit auf eine Seite kurz zu ändern und dann zurück, wie von Ludmila beschrieben:

    .MP1.Value = 4
    .MP1.Value = 0
    .MP1.Value = 4

Alternative Methoden

Eine alternative Methode zur Steuerung der ListView-Position könnte das Verwenden von LockWindowUpdate sein, um das Zeichnen des UserForms zu steuern. Dadurch wird das Flackern beim Anzeigen der Seiten minimiert. Der Code könnte so aussehen:

Private Sub UserForm_Initialize()
    Dim lngptrHwnd As LongPtr
    lngptrHwnd = FindWindowA(GC_CLASSNAME_USERFORM, Caption)
    Call LockWindowUpdate(lngptrHwnd)
    ' Seiten aktivieren
    Call LockWindowUpdate(0)
End Sub

Praktische Beispiele

Ein praktisches Beispiel für die Implementierung eines ListView in einem UserForm könnte so aussehen:

Private Sub UserForm_Initialize()
    With MultiPage1
        .Value = 0 ' Zeige die erste Seite an
        Call InitializeListView
    End With
End Sub

Private Sub InitializeListView()
    With ListViewZeitMonat
        .FullRowSelect = True
        .Gridlines = True
        .AllowColumnReorder = False
        .ColumnHeaders.Clear
        .ListItems.Clear

        .ColumnHeaders.Add , , "Tag", 50
        .ColumnHeaders.Add , , "A/U/K", 30
        ' Füge hier weitere Spalten hinzu
    End With
End Sub

Tipps für Profis

  • Verwendung von ColumnHeaders.Add: Achte darauf, die Spaltenüberschriften in der richtigen Reihenfolge hinzuzufügen, um die Lesbarkeit zu verbessern.

  • Vermeidung von Flickern: Verwende LockWindowUpdate, um das Flickern beim Wechseln zwischen den Seiten zu vermeiden.

  • Datenbindung: Wenn du Daten in den ListView laden möchtest, stelle sicher, dass die Daten in der richtigen Struktur vorhanden sind, um eine fehlerfreie Anzeige zu garantieren.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass die erste Zeile in meinem ListView immer sichtbar bleibt?
Um die erste Zeile sichtbar zu halten, kannst du die Methode how to keep first row visible in excel verwenden, indem du sicherstellst, dass der ListView korrekt in der Form positioniert ist.

2. Warum wird das ListView manchmal nicht richtig angezeigt?
Das ist oft ein normales Verhalten in MultiPage-Control. Stelle sicher, dass du alle Seiten beim Start des UserForms aktivierst oder die Sichtbarkeit der Seiten korrekt steuern.

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