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

Objekt verschiebt sich innerhalb einer Multipage?

Forumthread: Objekt verschiebt sich innerhalb einer Multipage?

Objekt verschiebt sich innerhalb einer Multipage?
09.01.2016 19:27:24
Kasimir
Hallo an alle!
Ich habe da ein kleines Problem und hoffe, dass hier jemand eine Lösung dafür hat.
Ich habe eine UserForm mit einer Multipage, die aus 4 Seiten besteht. In einer der Pages (Seite2) befindet sich ein Frame mit einem ListView-Steuerelement.
Beim Öffnen der UserForm sind alle bis auf die 1. Seite ausgeblendet. Nachdem ich in einer ComboBox eine Auswahl getroffen habe, werden die Seiten eingeblendet und das ListView mit Daten gefüllt. Wenn ich nun auf die Page klicke, in der das ListView vorhanden ist, verschiebt sich das ListView etwas nach oben aus dem Frame heraus. Zu Verdeutlichung habe ich mal ein Bild hochgeladen
Userbild
Wenn ich dann die Pages wechsele und danach wieder auf die Page klicke, in der sich das ListView befindet, wird das ListView an der korrekten Position angezeigt. Auch hier zur Verdeutlichung ein Bild
Userbild
Weiß jemand, warum dieses Verhalten auftritt und wie ich das abstellen kann?
Danke Euch schon mal für die Hilfe
Kasimir

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Mir ist das noch etwas aufgefallen...
09.01.2016 19:57:55
Kasimir
Hallo!
Mir ist da noch etwas aufgefallen. Das Verschieben der ListView geschieht nur, wenn diese vorher mit Daten gefüllt wurde. Wechsele ich auf die Page, in der sich die ListView befindet, und diese ist leer, also ohne diese vorher mit Daten gefüllt zu haben, dann erscheint die ListView an der korrekten Position.
Eventuell hilft das ja bei dem Finden des Fehlers weiter?
Gruß
Kasimir

Anzeige
AW: Mir ist das noch etwas aufgefallen...
09.01.2016 20:14:17
Nepumuk
Hallo,
versuch es mal nach dem Seitenwechsel mit: ListView1.Refresh
Gruß
Nepumuk

AW: Mir ist das noch etwas aufgefallen...
09.01.2016 20:17:32
Kasimir
Hallo Nepumuk!
Danke Dir für Deine Antwort? Meinst Du das wie folgt?
Private Sub MultiPage1_Click(ByVal Index As Long)
ListView1.Refresh
End Sub
Gruß
Kasimir

Anzeige
AW: Mir ist das noch etwas aufgefallen...
09.01.2016 20:30:00
Nepumuk
Hallo,
wenn du nicht auf jeder Seite ein ListView hast, dann würde ich den Index abfragen und nur bei der betreffenden Seite den Refresh machen.
Gruß
Nepumuk

AW: Mir ist das noch etwas aufgefallen...
09.01.2016 21:39:49
Kasimir
Hallo Nepumuk!
Danke nochmal für die Hilfe. Also ich habe jetzt folgenden Code:
Private Sub MultiPage1_Click(ByVal Index As Long)
If MultiPage1.Value = 2 Then
ListView1.Refresh
End If
End Sub
Das Ergebnis ist aber noch das Gleiche. Fülle ich das ListView und rufe dann die Seite auf, ist das ListView verschoben. Rufe ich die Seite auf ohne das ListView vorher gefüllt zu haben, befindet es sich an der korrekten Position. Fülle ich dann, verbleibt das ListView an der korrekten Position.
Schon komisch. Eventuell noch eine Idee. Ich würde ja gerne die Datei hochladen, das geht aber aus Datenschutzgründen leider nicht. Ansonsten versuche ich morgen mal eine Beispieldatei zu erstellen, mit der Hoffnung, das darin das Gleiche Problem auftritt.
Gruß
Kasimir

Anzeige
AW: Mir ist das noch etwas aufgefallen...
09.01.2016 22:29:49
Nepumuk
Hallo,
versuch es mal mit Repaint:
If MultiPage1.Value = 2 Then Repaint
Gruß
Nepumuk

AW: Mir ist das noch etwas aufgefallen...
10.01.2016 05:46:54
Kasimir
Hallo Nepumuk!
Leider hat die Änderung auch keinen Erfolg gebracht. Ich habe mal die UserForm in eine andere Datei kopiert und lauffähig gemacht. Da kannst Du Dir, oder auch jemand anderes, mal ansehen, wie das Verhalten der ListView ist.
https://www.herber.de/bbs/user/102695.xlsm
Eventuell kommst Du, oder jemand anderes dahinter, woran es liegt. Danke nochmal für die bisherige Hilfe.
MfG
Kasimir

Anzeige
AW: Mir ist das noch etwas aufgefallen...
10.01.2016 09:51:34
Nepumuk
Hallo Kasimir,
teste mal:
Private Sub ComboBox16_Change()
    
    Dim lngPage As Long
    
    If ComboBox16.ListIndex >= 0 Then
        With MultiPage1
            .Pages(1).visible = True
            .Pages(2).visible = True
            .Pages(3).visible = True
        End With
        
        Call ListView_füllen
        
        With MultiPage1
            If .Value <> 2 Then
                lngPage = .Value
                .Value = 2
                .Value = lngPage
            End If
        End With
        
    Else
        With MultiPage1
            .Pages(1).visible = False
            .Pages(2).visible = False
            .Pages(3).visible = False
        End With
    End If
    ListView1.Top = 12
    DoEvents
    
End Sub

Gruß
Nepumuk

Anzeige
Es funzt...
10.01.2016 10:00:09
Kasimir
Hallo Nepumuk!
Suuuper, danke Dir, so funktioniert's. Vor allem wenn ich sehe, wie simpel die Lösung ist, bin ich schwer begeistert.
Dir noch ein schönes Restwochenende,
Kasimir
;
Anzeige
Anzeige

Infobox / Tutorial

ListView in einer Multipage korrekt positionieren


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Öffne Excel und erstelle eine neue UserForm.

  2. Multipage hinzufügen: Füge ein Multipage-Steuerelement zu deiner UserForm hinzu und erstelle mindestens 4 Seiten.

  3. Frame und ListView hinzufügen: In einer der Seiten (z.B. Seite 2) füge einen Frame hinzu und platziere ein ListView-Steuerelement darin.

  4. Daten füllen: Stelle sicher, dass das ListView mit Daten gefüllt wird, wenn du die ComboBox auswählst.

  5. Event-Handler hinzufügen: Füge den folgenden VBA-Code in den Code-Bereich der UserForm ein:

    Private Sub MultiPage1_Click(ByVal Index As Long)
       If MultiPage1.Value = 2 Then
           ListView1.Refresh
           ListView1.Top = 12 ' Beispiel für eine Top-Positionierung
       End If
    End Sub
  6. Testen: Fülle das ListView mit Daten und wechsle zwischen den Seiten, um zu überprüfen, ob das ListView korrekt positioniert bleibt.


Häufige Fehler und Lösungen

  • Fehler: Das ListView verschiebt sich nach oben, wenn die Seite mit dem ListView geöffnet wird.

    • Lösung: Verwende ListView1.Refresh im Click-Event der Multipage. Achte darauf, dass du die Position des ListViews nach dem Refresh anpasst.
  • Fehler: Das ListView bleibt an der falschen Position, wenn es leer ist.

    • Lösung: Stelle sicher, dass du das ListView nur aktualisierst, wenn es mit Daten gefüllt ist.

Alternative Methoden

  • Repaint verwenden: Manchmal kann es helfen, die UserForm nach dem Seitenwechsel neu zu zeichnen. Füge dies in den Click-Event ein:

    If MultiPage1.Value = 2 Then Repaint
  • DoEvents: Verwende DoEvents nach dem Setzen der Position, um sicherzustellen, dass Excel alle aktuellen Ereignisse verarbeitet.


Praktische Beispiele

Hier ist ein Beispiel für den VBA-Code, um die Sichtbarkeit der Seiten zu steuern und das ListView zu aktualisieren:

Private Sub ComboBox16_Change()
    Dim lngPage As Long
    If ComboBox16.ListIndex >= 0 Then
        With MultiPage1
            .Pages(1).Visible = True
            .Pages(2).Visible = True
            .Pages(3).Visible = True
        End With
        Call ListView_füllen
        With MultiPage1
            If .Value <> 2 Then
                lngPage = .Value
                .Value = 2
                .Value = lngPage
            End If
        End With
        ListView1.Top = 12
        DoEvents
    End If
End Sub

Tipps für Profis

  • Verwende die Top-Eigenschaft: Setze die Top-Eigenschaft des ListViews, um sicherzustellen, dass es immer an der gewünschten Position angezeigt wird.
  • Debugging: Nutze Debug.Print in deinem Code, um zu überprüfen, welche Werte in den Variablen gespeichert sind und ob der Code wie erwartet ausgeführt wird.
  • Sichtbarkeit optimieren: Überlege, ob du die Sichtbarkeit der Seiten in einer anderen Reihenfolge steuern möchtest, um die Benutzererfahrung zu verbessern.

FAQ: Häufige Fragen

1. Warum verschiebt sich das ListView in meiner Multipage? Das ListView kann sich verschieben, wenn es aktualisiert wird, während es sichtbar ist. Dies geschieht häufig aufgrund von Layout-Problemen in der UserForm.

2. Wie kann ich sicherstellen, dass das ListView immer an der richtigen Stelle ist? Verwende die Top-Eigenschaft, um die Position des ListViews manuell festzulegen, und führe ein Refresh durch, sobald die Seite gewechselt wird.

3. Gibt es eine bessere Methode zur Aktualisierung des ListViews? Ja, du kannst die Methode Repaint verwenden, um die UserForm nach einem Seitenwechsel neu zu zeichnen. Dies kann helfen, visuelle Probleme zu beheben.

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