Bräuchte mal wieder Hilfe von den Profis,
mit einem Code schreibe ich Daten aus einer Userform mit diversen Textboxen in die Tabelle. Den Code habe ich jetzt dahingehend erweitert, dass ich noch einen Text in einer Textbox erfassen und diesen dann als Kommentar in die Zelle schreibe. Der Kommentar ist immer in einer Zelle in der Spalte D. Das funktioniert auch. Hier der Code-Teil mit dem ich den Kommentar in die Zelle schreibe:
With ActiveCell
.ClearComments
If Dateneingabe.Bemerkungen <> "" Then
.AddComment Dateneingabe.Bemerkungen.Text
.Comment.Shape.DrawingObject.AutoSize = False
.Comment.Shape.Width = 700
.Comment.Shape.Height = 400
End If
End With
Dateneingabe.Bemerkungen = ""
Im weiteren Verlauf lese ich dann die Daten aus der Tabelle über ein Array in eine mehrspaltige Listbox ein.
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Dim sText As String
Dim i As Long, n As Long, r As Long
Dim ArValues()
Dim arrList()
Worksheets("Jahrestabelle").Activate
TextBox1.SetFocus
Personalien.Clear
Änderung.Ändern.ForeColor = RGB(0, 100, 0)
Änderung.Löschen.ForeColor = RGB(255, 0, 0)
With Worksheets("Jahrestabelle")
i = .Range("D1000").End(xlUp).Row
If i > 4 Then
sText = .Cells(i, 4).Value & .Cells(i, 5).Value & .Cells(i, 6).Value
'Array groß genug Dimensionieren
ReDim Preserve ArValues(1 To 12, 1 To i)
For i = 5 To i
If Trim(CStr(.Cells(i, 4).Value)) <> "" Then
n = n + 1 'Hilfszähler um Array zu füllen
ArValues(1, n) = .Cells(i, 4).Value
ArValues(2, n) = .Cells(i, 5).Value
ArValues(3, n) = .Cells(i, 6)
ArValues(4, n) = .Cells(i, 7).Value
ArValues(5, n) = .Cells(i, 8)
ArValues(6, n) = .Cells(i, 9)
ArValues(7, n) = .Cells(i, 10)
ArValues(8, n) = .Cells(i, 11)
ArValues(9, n) = .Cells(i, 12)
ArValues(10, n) = .Cells(i, 13)
ArValues(11, n) = i
ArValues(12, n) = .Cells(i, 4).NoteText
End If
Next i
'nicht benötigte Spalten entfernen
ReDim Preserve ArValues(1 To 12, 1 To n)
ReDim arrList(1 To n, 1 To 12)
'Array drehen und in Listbox schreiben
For r = 1 To 12
For i = 1 To n
arrList(i, r) = ArValues(r, i)
Next
Next
Me.Personalien.List = arrList
End If
End With
Worksheets("Dateneingabe").Activate
Application.ScreenUpdating = True
End Sub
An den fett markierten Stellen habe ich das Array um ein Feld erweitert (vorher 11, jetzt 12) und lese die Daten aus dem Kommentar ebenfalls in das Array und die Listbox ein. Die Listbox habe ich natürlich auch um eine Spalte erweitert. Auch das scheint zu funktionieren.Anschließend übergebe ich den ausgewählten Listboxeintrag an eine andere Userform mit diversen Textboxen. Hintergrund ist, dass ich dort die Daten editieren und wieder in die Tabelle zurückschreiben kann.
Private Sub UserForm_Activate()
Application.ScreenUpdating = False
Zeile.Visible = False
Ändern.ForeColor = RGB(0, 100, 0)
Veränderungen.Familienname = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 0)
Veränderungen.Vorname = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 1)
Veränderungen.GebDatum = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 2)
Veränderungen.Geburtsort = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 3)
Veränderungen.Datum = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 4)
Veränderungen.Stö = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 5)
Veränderungen.Stra = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 6)
Veränderungen.Verw = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 7)
Veränderungen.OE = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 8)
Veränderungen.Eigene = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 9)
Veränderungen.Zeile = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 10)
Veränderungen.Kommentar = Änderung.Personalien.List(Änderung.Personalien.ListIndex, 11)
With Familienname
.SelStart = 0
.SelLength = Len(.Text)
End With
Familienname.SetFocus
Application.ScreenUpdating = True
End Sub
Das geht auch, aber leider nur bedingt. Ich habe hier das Problem, dass der Text aus dem Kommentar der Zelle zwar in die Textbox übertragen wird. Handelt es sich um einen längeren Text dann wird er nicht komplett in der Textbox dargestellt sondern irgendwann einfach abgeschnitten, der Rest fehlt.
Ich habe jetzt keine Ahnung, ob es bereits beim Einlesen ins Array, bei der Übergabe des Arrays an die Listbox oder bei der Übergabe aus der Listbox in die Textbox zu diesem Problem kommt.
Vielleicht kann mir ja jemand weiter helfen.
Danke Werner