Microsoft Excel

Herbers Excel/VBA-Archiv

UF ListView Position


Betrifft: UF ListView Position
von: Ludmila
Geschrieben am: 16.04.2019 04:53:07

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

  

Betrifft: AW: UF ListView Position
von: Nepumuk
Geschrieben am: 16.04.2019 09:38:43

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


  

Betrifft: AW: UF ListView Position
von: Ludmila
Geschrieben am: 17.04.2019 03:22:49

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