Daten aus Listbox an Formular übergeben

  • Excel

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ThorStein83.

    Daten aus Listbox an Formular übergeben

    Hallo,
    ich habe ein kleines Problemchen. Und zwar habe ich eine Excel-Datei, in der ich Weiterbildungen plane und verwalte.
    Unter anderem auch Stundenpläne. Dazu habe ich eine UserForm erstellt, in der 5 Tage mit je 8 Stunden eingetragen werden und die Daten in ein Excel-Sheet schreibt. Die einzelnen Wochen werden werden in einer Listbox angezeigt.
    Durch klick auf die entsprechende Woche in der Listbox erscheinen die Daten (5Tage,8 Stunden) dann wieder in der UF und können bearbeitet werden. Jetzt möchte ich diese Daten an ein Formular (weiteres Sheet) übergeben und ausdrucken. Anschließend sollen die Daten aus dem Formular wieder gelöscht werden und ggf. ein anderer Datensatz gedruckt werden.
    Ich kann die Daten zwar fix an ein Sheet übergeben, aber dann brauche ich für jede Woche ein extra Formular. Da die Weiterbildungen mitunter unterschiedliche Wochenanzahlen haben, ist dies sehr unpraktikabel.

    Hat jemand eine Idee??

    Viele Grüße
    ThorStein
    gib die Daten entweder schon in dem activate oder der Inizialisie an, oder baue dein Formular anhand von code auf, der sich je nach Bedarf ändert. So könntest du ja sagen wenn so und so viele wochen sind oder >1 dann soll es so und so aussehen.
    "Der Visual Basic ist nur so schlau wie der, der davor sitzt" - Na schön! Dann steh ich eben auf!

    "Wenn du denkst es geht nicht mehr kommt irgendwo ein Lichtlein her"
    If Tunnel.Licht = JemandImTunnelDerVerzweifeltIst Then Licht.Aus = True
    Hallo,
    ich habe mal etwas rumgebastelt und das Ergebnis ist folgender Code:

    Quellcode

    1. Option Explicit
    2. Option Compare Text
    3. Private Sub beschriftUeberschrift_Click()
    4. End Sub
    5. ' Meuer Eintrag Schaltfläche
    6. Private Sub CommandButton1_Click()
    7. Dim lZeile As Long
    8. lZeile = 2
    9. Do While Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) <> ""
    10. lZeile = lZeile + 5 'Nächste Zeile bearbeiten
    11. Loop
    12. Tabelle10.Cells(lZeile, 1) = CStr("Neue Woche " & lZeile)
    13. ListBox1.AddItem CStr("Neue Woche " & lZeile)
    14. ListBox1.ListIndex = ListBox1.ListCount - 1
    15. End Sub
    16. 'Speichern Schaltfläche
    17. Private Sub CommandButton3_Click()
    18. Dim lZeile As Long
    19. If ListBox1.ListIndex = -1 Then Exit Sub
    20. lZeile = 2 '
    21. Do While Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) <> ""
    22. If ListBox1.Text = Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) Then
    23. Tabelle10.Cells(lZeile, 1).Value = Trim(CStr(TextBox121.Text)) 'Wochen-Nr
    24. Tabelle10.Cells(lZeile, 2).Value = TextBox122.Text 'Datum Montag
    25. Tabelle10.Cells(lZeile, 3).Value = TextBox1.Text 'Stunden Montag
    26. Tabelle10.Cells(lZeile, 4).Value = TextBox10.Text 'Dozenten Montag
    27. Tabelle10.Cells(lZeile, 5).Value = TextBox9.Text 'Raum Montag
    28. Tabelle10.Cells(lZeile + 1, 3).Value = TextBox25.Text 'Stunden Dienstag
    29. Tabelle10.Cells(lZeile + 1, 4).Value = TextBox34.Text 'Dozenten Dienstag
    30. Tabelle10.Cells(lZeile + 1, 5).Value = TextBox33.Text 'Raum Dienstag
    31. Tabelle10.Cells(lZeile + 2, 3).Value = TextBox49.Text 'Stunden Mittwoch
    32. Tabelle10.Cells(lZeile + 2, 4).Value = TextBox58.Text 'Dozenten Mittwoch
    33. Tabelle10.Cells(lZeile + 2, 5).Value = TextBox57.Text 'Raum Mittwoch
    34. Tabelle10.Cells(lZeile + 3, 3).Value = TextBox73.Text 'Stunden Donnerstag
    35. Tabelle10.Cells(lZeile + 3, 4).Value = TextBox82.Text 'Dozenten Donnerstag
    36. Tabelle10.Cells(lZeile + 3, 5).Value = TextBox81.Text 'Raum Donnerstag
    37. Tabelle10.Cells(lZeile + 4, 3).Value = TextBox97.Text 'Stunden Freitag
    38. Tabelle10.Cells(lZeile + 4, 4).Value = TextBox106.Text 'Dozenten Freitag
    39. Tabelle10.Cells(lZeile + 4, 5).Value = TextBox105.Text 'Raum Freitag
    40. If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
    41. Call UserForm_Initialize
    42. If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
    43. End If
    44. Exit Do
    45. End If
    46. lZeile = lZeile + 5
    47. Loop
    48. End Sub
    49. 'Lösche Schaltfläche
    50. Private Sub CommandButton7_Click()
    51. Dim lZeile As Long
    52. If ListBox1.ListIndex = -1 Then Exit Sub
    53. lZeile = 2
    54. Do While Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) <> ""
    55. If ListBox1.Text = Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) Then
    56. Tabelle10.Rows(CStr(lZeile & ":" & lZeile)).Delete
    57. Call UserForm_Initialize
    58. If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
    59. Exit Do
    60. End If
    61. lZeile = lZeile + 5
    62. Loop
    63. End Sub
    64. 'Stundenplan drucken
    65. Private Sub CommandButton8_Click()
    66. Dim lZeile As Long
    67. If ListBox1.ListIndex = -1 Then Exit Sub
    68. lZeile = 1
    69. Do While Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) <> ""
    70. If ListBox1.Text = Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) Then
    71. Tabelle11.Cells(lZeile, 7).Value = Trim(CStr(TextBox121.Text)) 'Woche
    72. Tabelle11.Cells(lZeile - 1, 8).Value = TextBox122.Text 'Datum Montag
    73. Tabelle11.Cells(lZeile + 3, 3).Value = TextBox1.Text 'Stunden Montag
    74. Tabelle11.Cells(lZeile + 4, 3).Value = TextBox10.Text 'Dozenten Montag
    75. Tabelle11.Cells(lZeile + 4, 4).Value = TextBox9.Text 'Raum Montag
    76. Tabelle11.Cells(lZeile + 3, 5).Value = TextBox25.Text 'Stunden Dienstag
    77. Tabelle11.Cells(lZeile + 4, 5).Value = TextBox34.Text 'Dozenten Dienstag
    78. Tabelle11.Cells(lZeile + 4, 6).Value = TextBox33.Text 'Raum Dienstag
    79. Tabelle11.Cells(lZeile + 3, 7).Value = TextBox49.Text 'Stunden Mittwoch
    80. Tabelle11.Cells(lZeile + 4, 7).Value = TextBox58.Text 'Dozenten Mittwoch
    81. Tabelle11.Cells(lZeile + 4, 8).Value = TextBox57.Text 'Raum Mittwoch
    82. Tabelle11.Cells(lZeile + 3, 9).Value = TextBox73.Text 'Stunden Donnerstag
    83. Tabelle11.Cells(lZeile + 4, 9).Value = TextBox82.Text 'Dozenten Donnerstag
    84. Tabelle11.Cells(lZeile + 4, 10).Value = TextBox81.Text 'Raum Donnerstag
    85. Tabelle11.Cells(lZeile + 3, 11).Value = TextBox97.Text 'Stunden Freitag
    86. Tabelle11.Cells(lZeile + 4, 11).Value = TextBox106.Text 'Dozenten Freitag
    87. Tabelle11.Cells(lZeile + 4, 12).Value = TextBox105.Text 'Raum Freitag
    88. If ListBox1.Text <> Trim(CStr(TextBox1.Text)) Then
    89. Call UserForm_Initialize
    90. If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
    91. End If
    92. Exit Do
    93. End If
    94. lZeile = lZeile + 1
    95. Loop
    96. ' Tabelle11.PrintOut Copies:=1
    97. End Sub
    98. Private Sub ListBox1_Change()
    99. Dim lZeile As Long
    100. TextBox25 = ""
    101. TextBox33 = ""
    102. TextBox34 = ""
    103. TextBox57 = ""
    104. TextBox58 = ""
    105. TextBox73 = ""
    106. TextBox81 = ""
    107. TextBox82 = ""
    108. TextBox97 = ""
    109. TextBox105 = ""
    110. TextBox106 = ""
    111. If ListBox1.ListIndex >= 0 Then
    112. lZeile = 2
    113. Do While Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) <> ""
    114. If ListBox1.Text = Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) Then
    115. TextBox121 = Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) 'Wochen-Nr
    116. TextBox122 = Tabelle10.Cells(lZeile, 2).Value 'Datum Montag
    117. TextBox1 = Tabelle10.Cells(lZeile, 3).Value 'Stunden Montag
    118. TextBox10 = Tabelle10.Cells(lZeile, 4).Value 'Dozenten Montag
    119. TextBox9 = Tabelle10.Cells(lZeile, 5).Value 'Raum Montag
    120. TextBox25 = Tabelle10.Cells(lZeile + 1, 3).Value 'Stunden Dienstag
    121. TextBox34 = Tabelle10.Cells(lZeile + 1, 4).Value 'Dozenten Dienstag
    122. TextBox33 = Tabelle10.Cells(lZeile + 1, 5).Value 'Raum Dienstag
    123. TextBox49 = Tabelle10.Cells(lZeile + 3, 7).Value 'Raum Mittwoch
    124. TextBox58 = Tabelle10.Cells(lZeile + 2, 4).Value 'Dozenten Mittoch
    125. TextBox57 = Tabelle10.Cells(lZeile + 2, 5).Value 'Raum Mittwoch
    126. TextBox73 = Tabelle10.Cells(lZeile + 3, 3).Value 'Stunden Donnerstag
    127. TextBox82 = Tabelle10.Cells(lZeile + 3, 4).Value 'Dozenten Donnerstag
    128. TextBox81 = Tabelle10.Cells(lZeile + 3, 5).Value 'Raum Donnerstag
    129. TextBox97 = Tabelle10.Cells(lZeile + 4, 3).Value 'Stunden Freitag
    130. TextBox106 = Tabelle10.Cells(lZeile + 4, 4).Value 'Dozenten Freitag
    131. TextBox105 = Tabelle10.Cells(lZeile + 4, 5).Value 'Raum Freitag
    132. Exit Do
    133. End If
    134. lZeile = lZeile + 5
    135. Loop
    136. End If
    137. End Sub
    138. Private Sub UserForm_Activate()
    139. If ListBox1.ListCount > 0 Then ListBox1.ListIndex = 0
    140. End Sub
    141. Private Sub UserForm_Initialize()
    142. Dim lZeile As Long
    143. TextBox25 = ""
    144. TextBox33 = ""
    145. TextBox34 = ""
    146. TextBox57 = ""
    147. TextBox58 = ""
    148. TextBox73 = ""
    149. TextBox81 = ""
    150. TextBox82 = ""
    151. TextBox97 = ""
    152. TextBox105 = ""
    153. TextBox106 = ""
    154. ListBox1.Clear
    155. lZeile = 2
    156. Do While Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) <> ""
    157. ListBox1.AddItem Trim(CStr(Tabelle10.Cells(lZeile, 1).Value))
    158. lZeile = lZeile + 5
    159. Loop
    160. End Sub


    Die Daten aus der Listbox werden im Sheet "Stundenplanung" gespeichert. In der Listbox gibt es nun 2 Datensätze (Woche 1 und Woche 2)
    Woche 1 kann ich mittels Button "Stundenplan drucken" vom Sheet "Stundenplanung" ins Sheet "StundenplanFormular" übertragen, bei der Woche 2 funktioniert dies leider nicht.

    Da komme ich nun leider nicht mehr weiter.
    Für Tipps wäre ich, wie immer dankbar!!!
    Sehr gut!
    Und wieder was dazu gelernt.

    Also hier die Datei.
    Im Sheet "Stundenplanung" sind zwei Datensätze, einmal Woche 1 und Woche 2. Diese habe ich über ein UF mittels Textboxen und Listbox eingegeben und kann auch beide über die Listbox aufrufen und verändern. Wenn ich nun die Daten über "Stundenplan drucken" an das Sheet "Stundenplanformular" übergeben will um es dann auszudrucken, wird immer nur der Datensatz Woche 1 übergeben, egal welchen Datensatz ich aktuell in der Listbox ausgewählt habe.

    Vorab vielen Dank!!!!
    Dateien
    Hallo,

    da sind noch einige Fehler. Beseitige ich den, weshalb Du die Frage hier gestellt hast, dann packt er die 2. Woche in die 3. Stunde, die 3.Woche in die 5. Stunde. lZeilen des Stundenplanformulars sind fix und nicht dynamisch anzugeben. Z.B. so, wenn man die Schleifenmöglichkeit (Grundsätze weiter unten) nicht umsetzt.

    Visual Basic-Quellcode

    1. 'Stundenplan drucken
    2. Private Sub CommandButton8_Click()
    3. Dim lZeile As Long
    4. If ListBox1.ListIndex = -1 Then Exit Sub
    5. lZeile = 2
    6. Do While Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) <> ""
    7. If ListBox1.Text = Trim(CStr(Tabelle10.Cells(lZeile, 1).Value)) Then
    8. Tabelle11.Cells(2, 7).Value = Trim(CStr(TextBox121.Text)) 'Woche
    9. Tabelle11.Cells(1, 8).Value = TextBox122.Text 'Datum Montag
    10. Tabelle11.Cells(5, 3).Value = TextBox1.Text 'Stunden Montag
    11. Tabelle11.Cells(6, 3).Value = TextBox10.Text 'Dozenten Montag
    12. Tabelle11.Cells(6, 4).Value = TextBox9.Text 'Raum Montag
    13. Tabelle11.Cells(5, 5).Value = TextBox25.Text 'Stunden Dienstag
    14. Tabelle11.Cells(6, 5).Value = TextBox34.Text 'Dozenten Dienstag
    15. Tabelle11.Cells(6, 6).Value = TextBox33.Text 'Raum Dienstag
    16. Tabelle11.Cells(5, 7).Value = TextBox49.Text 'Stunden Mittwoch
    17. Tabelle11.Cells(6, 7).Value = TextBox58.Text 'Dozenten Mittwoch
    18. Tabelle11.Cells(6, 8).Value = TextBox57.Text 'Raum Mittwoch
    19. Tabelle11.Cells(5, 9).Value = TextBox73.Text 'Stunden Donnerstag
    20. Tabelle11.Cells(6, 9).Value = TextBox82.Text 'Dozenten Donnerstag
    21. Tabelle11.Cells(6, 10).Value = TextBox81.Text 'Raum Donnerstag
    22. Tabelle11.Cells(5, 11).Value = TextBox97.Text 'Stunden Freitag
    23. Tabelle11.Cells(6, 11).Value = TextBox106.Text 'Dozenten Freitag
    24. Tabelle11.Cells(6, 12).Value = TextBox105.Text 'Raum Freitag
    25. Exit Do
    26. End If
    27. lZeile = lZeile + 5
    28. Loop
    29. Dim strDruckerAktiv As String, strDruckerPDF As String
    30. strDruckerAktiv = Application.ActivePrinter 'Drucker merken
    31. strDruckerPDF = "PDFCreator auf NE00:"
    32. Application.ActivePrinter = strDruckerPDF
    33. ActiveSheet.PrintOut preview:=False
    34. Application.ActivePrinter = strDruckerAktiv 'Drucker zurücksetzen
    35. End Sub

    Wobei die Schleife irgendwie Quatsch ist. Die Daten einfach aus dem Formular holen und gut ist.

    Visual Basic-Quellcode

    1. 'Stundenplan drucken
    2. Private Sub CommandButton8_Click()
    3. With Sheets("StundenplanFormular")
    4. .Cells(2, 7).Value = Trim(CStr(TextBox121.Text)) 'Woche
    5. .Cells(1, 8).Value = TextBox122.Text 'Datum Montag
    6. .Cells(5, 3).Value = TextBox1.Text 'Stunden Montag
    7. .Cells(6, 3).Value = TextBox10.Text 'Dozenten Montag
    8. .Cells(6, 4).Value = TextBox9.Text 'Raum Montag
    9. .Cells(5, 5).Value = TextBox25.Text 'Stunden Dienstag
    10. .Cells(6, 5).Value = TextBox34.Text 'Dozenten Dienstag
    11. .Cells(6, 6).Value = TextBox33.Text 'Raum Dienstag
    12. .Cells(5, 7).Value = TextBox49.Text 'Stunden Mittwoch
    13. .Cells(6, 7).Value = TextBox58.Text 'Dozenten Mittwoch
    14. .Cells(6, 8).Value = TextBox57.Text 'Raum Mittwoch
    15. .Cells(5, 9).Value = TextBox73.Text 'Stunden Donnerstag
    16. .Cells(6, 9).Value = TextBox82.Text 'Dozenten Donnerstag
    17. .Cells(6, 10).Value = TextBox81.Text 'Raum Donnerstag
    18. .Cells(5, 11).Value = TextBox97.Text 'Stunden Freitag
    19. .Cells(6, 11).Value = TextBox106.Text 'Dozenten Freitag
    20. .Cells(6, 12).Value = TextBox105.Text 'Raum Freitag
    21. End With
    22. Dim strDruckerAktiv As String, strDruckerPDF As String
    23. strDruckerAktiv = Application.ActivePrinter 'Drucker merken
    24. strDruckerPDF = "PDFCreator auf NE00:"
    25. Application.ActivePrinter = strDruckerPDF
    26. ActiveSheet.PrintOut preview:=False
    27. Application.ActivePrinter = strDruckerAktiv 'Drucker zurücksetzen
    28. End Sub


    Der Mittwoch wird zwar in die Stundenplanung eingetragen, jedoch nicht mehr ausgelesen.
    Die Stunden>1 kann man noch gar nicht eingeben.

    Da würde ich vorher noch ein paar Grundsätze festlegen.
    Alle Textboxen / Buttons bekommen Namen, dass man sie beim Programmieren gleich erkennt. Die Tabellen würde ich auch mit dem Namen ansprechen. sheets("Stundenplanung").Cells(x,y) statt Tabelle10.

    Vergibtst Du die Namen mit Nummern hinten dran, kannst Du die per Schleife bequem Ansprechen.

    Statt

    Visual Basic-Quellcode

    1. TextBox25 = ""
    2. TextBox33 = ""
    3. TextBox34 = ""
    4. TextBox57 = ""
    5. TextBox58 = ""
    6. TextBox73 = ""
    7. TextBox81 = ""
    8. TextBox82 = ""
    9. TextBox97 = ""
    10. TextBox105 = ""
    11. TextBox106 = ""

    So

    Visual Basic-Quellcode

    1. For i = 25 To 106
    2. On Error Resume Next 'Fehlen ein paar...
    3. Controls("Textbox" & Trim(CStr(i))).Text = ""
    4. Next
    5. On Error GoTo 0


    Die Lücken sollten wech. Ohne On Error Resume Next findet man besser Fehler im Code. Ist im Listbox_Change aber unnötig, da eh alles aus der Stundenplanung geholt wird.

    Zum Entwickeln die Form Modeless öffnen

    Visual Basic-Quellcode

    1. Private Sub Workbook_Open()
    2. 'Application.Visible = False
    3. UserForm6.Show vbModeless
    4. 'Application.Visible = True
    5. End Sub

    Da kannst Du dann zugucken, was passiert.

    Die Namen kannst Du dann auch noch dynamisch durch das Makro zusammensetzen, wenn Du möchtest. So können die Textboxen dann z.B. den Wochentag und die Stunde mit enthalten. Das ist dann halt bissel mehr Aufwand.
    Gruß
    Peterfido

    Keine Unterstützung per PN!

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „peterfido“ ()

    Hallo,
    vielen Dank für die Tipps, hab sie umgesetzt und es klappt wunderbar!!!

    Mit den eindeutigen Namen für Textboxen usw. habe ich auch umgesetzt, da hätte ich auch selber drauf kommen können ;)
    Die Stunden >1 habe ich noch nicht umgesetzt, um die Übersichtlichkeit für die "Nachbauer" zu gewährleisten. Das sollte ja dann, wenn die ersten Stunden funktionieren 1:1 umzusetzen sein.

    Nochmals vielen Dank für die tolle Hilfe!!!