Listbox eintrag verschiebt sich

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
UserForm Frame ListBox
Bild

Betrifft: Listbox eintrag verschiebt sich
von: SigiF
Geschrieben am: 02.06.2015 17:40:27

Hallo,
in einer UF-Listbox lasse ich diese wie nachfolgend füllen.
Das funktioniert auch.
Die Listbox befindet sich in einem Frame einer Userform.
Jedesmal wenn ich den Frame und aufrufe wird die Listbox zwar gefüllt, jedoch verschiebt sich der Eintrag in der Listbox nach jedem Aufruf um 2 Spalten nach unten.
Die Spalten sind leer!
10 x Aufrufen bedeutet, das der erste Eintrag ab der Spalte 21 beginnt. Alles andere ist leer.
Danke!
Gruß
Sigi
Option Explicit
Private Declare PtrSafe


Function SafeArrayGetDim Lib "oleaut32.dll" ( _
    ByRef pArray() As Any) As Long

Sub KD_einlesen()
Dim iRowU As Integer, ii As Integer
Dim arr()
  Set WkbD = Workbooks(sData)
  Set WksKD = WkbD.Worksheets(KD)
      frmStart.lstAlle.Clear
        With WksKD
          For ii = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            If Not IsEmpty(.Cells(ii, 1)) Then
              ReDim Preserve arr(0 To 4, 0 To iRowU)
                arr(0, iRowU) = .Cells(ii, 1)
                arr(1, iRowU) = .Cells(ii, 2)
                arr(2, iRowU) = .Cells(ii, 3)
                arr(3, iRowU) = .Cells(ii, 27)
              arr(4, iRowU) = " "
              iRowU = iRowU + 1
            End If
        Next ii
      End With
  If SafeArrayGetDim(arr) <> 0 Then .lstAlle.Column = arr
End Sub

Bild

Betrifft: AW: Listbox eintrag verschiebt sich
von: fcs
Geschrieben am: 03.06.2015 10:57:11
Hallo Sigi,
ich hab keine Ahnung, was die Function
"SafeArrayGetDim" macht / anrichtet.
aber eigentlich sollte es so funktionieren:

Sub KD_einlesen()
  Dim iRowU As Integer, ii As Integer
  Dim arr()
  Set wkbD = Workbooks(sData)
  Set WksKD = wkbD.Worksheets(KD)
      frmStart.lstAlle.Clear
        With WksKD
          For ii = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
            If Not IsEmpty(.Cells(ii, 1)) Then
              ReDim Preserve arr(0 To 4, 0 To iRowU)
                arr(0, iRowU) = .Cells(ii, 1)
                arr(1, iRowU) = .Cells(ii, 2)
                arr(2, iRowU) = .Cells(ii, 3)
                arr(3, iRowU) = .Cells(ii, 27)
              arr(4, iRowU) = " "
              iRowU = iRowU + 1
            End If
        Next ii
      End With
  If iRowU > 0 Then frmStart.lstAlle.Column = arr
End Sub
Gruß
Franz

Bild

Betrifft: AW: Listbox eintrag verschiebt sich
von: SigiF
Geschrieben am: 03.06.2015 23:56:47
Hallo Franz,
Danke für Deine Antwort.
Ich habe meinen Fehler eben gefunden, es lag daran, dass ich Public iRowU as Integer in einem Modul verwandt habe.
Das If SafeArrayGetDim(arr) <> 0 Then .lstAlle.Column = arr
vermeidet den Laufzeitfehler 380. Habe ich hier vom Forum.
Danke!
Gruß
Sigi

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Listbox eintrag verschiebt sich "