InvalidOperationException Multithreading bei TreeView? Wo finde ich den Thread?

  • VB.NET

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von Roro.

    InvalidOperationException Multithreading bei TreeView? Wo finde ich den Thread?

    Hallo,

    Ich erstelle einen Treeview und bekomme den Fehler:
    InvalidOperationException wurde nicht behandelt. Ungültiger threadübergrifender Vorgang: Der Zugriff auf das Steuerelement frmSpielen erfolgte von einem anderen Thread als dem Thread, für den es erstellt wurde.

    VB.NET-Quellcode

    1. Private Sub TreeViewSpielen_AfterSelect(ByVal eventSender As Object, ByVal eventArgs As TreeViewEventArgs) Handles TreeViewSpielen.AfterSelect
    2. Dim Node As TreeNode = eventArgs.Node
    3. frmSpielen.DefInstance.Close()
    4. frmBerichte.DefInstance.Close()
    5. frmAbsatzGesamt.DefInstance.Close()
    6. [...]
    7. frmPeriodeBeenden.DefInstance.Close()
    8. If Node.Name = "A1" Then frmSpielen.DefInstance.Show() 'Hier tritt der Fehler auf
    9. If Node.Name = "B1" Then frmBerichte.DefInstance.Show()
    10. If Node.Name = "C11" Then frmAbsatzGesamt.DefInstance.Show()
    11. [...]
    12. If Node.Name = "A2" Then frmPeriodeBeenden.DefInstance.Show()
    13. End Sub


    Ich hab auch schon in der Microsoft Hilfe nachgelesen, verstehe aber nicht wirklich was ein Thread ist und wie das funktioniert. Kann ich irgendwie herausfinden welcher andere Thread darauf zugreift oder ähnliches?
    mfg,
    Roman
    hmm, Deine DefInstance verwirren mich etwas, was soll denn das sein ?

    Ich gehe mal dem Namen nach aus, dass alles was bei Dir mit frm anfängt auch Forms sein sollen. Mit Form.Close wird eine Form nicht nur geschlössen, sondern inclusive aller seiner Resourcen disposed. Du kannst also nicht später versuchen es mit Form.Show wieder anzuzeigen.

    Wenn Du die Form nur verbergen aber nicht disposen willst solltest Du Form.Hide verwenden.
    Das DefInstance hab ich auch nicht verstanden. Das hat der Upgrade Wizard gemacht. Also es ist ein vb 6 to net upgrade gewesen.
    So sah der Code vorher aus:

    VB.NET-Quellcode

    1. Private Sub TreeViewSpielen_NodeClick(ByVal Node As ComctlLib.Node)
    2. Unload frmSpielen
    3. Unload frmBerichte
    4. Unload frmAbsatzGesamt
    5. Unload frmAbsatzStrom
    6. Unload frmAbsatzWaerme
    7. Unload frmBeschaffungProduktionGesamt
    8. [...]
    9. Unload frmPeriodeBeenden
    10. If Node.Key = "A1" Then frmSpielen.Show
    11. If Node.Key = "B1" Then frmBerichte.Show
    12. If Node.Key = "C11" Then frmAbsatzGesamt.Show
    13. If Node.Key = "D111" Then frmAbsatzStrom.Show
    14. If Node.Key = "D112" Then frmAbsatzWaerme.Show
    15. If Node.Key = "C12" Then frmBeschaffungProduktionGesamt.Show
    16. [...]
    17. If Node.Key = "A2" Then frmPeriodeBeenden.Show
    18. End Sub

    viel schöner. Wenn ich das close durch Hide ersetze bekomme ich nun ein "Win32 Exception wurde nicht behandelt. Fehler beim erstellen des Fensterhandles"
    Soll ich das DefInstance einfach mal wegnehmen?

    Hab ich gemacht. Dann kommt: InvalidOperationException wurde nicht behandelt. Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Fehler beim Erstellen des Fensterhandles..

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Roro“ ()

    DefInstance kannst du da eigt. rauslöschen, außerdem lösch dann bitte noch die Property DefInstance(sollte im jeweiligen Formular zu finden sein), da macht der UpdateWizard etwas mist, da .Net das ja direkt kann...
    Ich wollte auch mal ne total überflüssige Signatur:
    ---Leer---
    Was heißt das, die Property?

    VB.NET-Quellcode

    1. 'UPGRADE_WARNING: (2080) Form_Load event wurde auf Form_Load event aktualisiert und weist ein neues Verhalten auf. Weitere Informationen: http://www.vbtonet.com/ewis/ewi2080.aspx
    2. Private Sub frmSpielen_Load(ByVal eventSender As Object, ByVal eventArgs As EventArgs) Handles MyBase.Load
    3. 'Extras-Menu deaktivieren
    4. MenuEintragAusNeueSim()
    5. MenuEintragAusOeffnen()
    6. 'Formulargröße einstellen
    7. 'frmSpielen.Width = 11945
    8. Me.Text = "Spielperiode " & Periode
    9. Me.Left = VB6.TwipsToPixelsX(3735)
    10. Me.Top = 0
    11. Me.Width = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(MDIfrmStart.DefInstance.Width) - VB6.PixelsToTwipsX(frmTree.DefInstance.Width) - 200)
    12. Me.Height = frmTree.DefInstance.Height
    13. 'den TreeView aktualisieren
    14. frmTree.DefInstance.TreeViewSpielen.SelectedNode = frmTree.DefInstance.TreeViewSpielen.Nodes.Item("B1")
    15. If Periode > 12 Then cmdGoEntscheidung.Visible = False
    16. End Sub
    17. End Class



    Soll ich hier alle DefInstance löschen?

    EDIT:

    oder meinst du eher das hier?

    VB.NET-Quellcode

    1. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
    2. Partial Class frmSpielen
    3. #Region "Upgradeunterstützung "
    4. Private Shared m_vb6FormDefInstance As frmSpielen
    5. Private Shared m_InitializingDefInstance As Boolean
    6. Public Shared Property DefInstance() As frmSpielen
    7. Get
    8. If m_vb6FormDefInstance Is Nothing OrElse m_vb6FormDefInstance.IsDisposed Then
    9. m_InitializingDefInstance = True
    10. m_vb6FormDefInstance = New frmSpielen()
    11. m_InitializingDefInstance = False
    12. End If
    13. Return m_vb6FormDefInstance
    14. End Get
    15. Set
    16. m_vb6FormDefInstance = Value
    17. End Set
    18. End Property
    19. #End Region

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Roro“ ()

    Ich hab das zweite auskommentiert und dann an einigen Stellen DefInstance für frmSpielen gelöscht, da der Debugger gemeckert hat. Jetzt bekomme ich leider immernoch:

    VB.NET-Quellcode

    1. If Node.Name = "A1" Then frmSpielen.Show()


    "Win32 Exception wurde nicht behandelt. Fehler beim erstellen des Fensterhandles"
    Ja genau, so siehts aus jetzt:

    VB.NET-Quellcode

    1. Private Sub TreeViewSpielen_AfterSelect(ByVal eventSender As Object, ByVal eventArgs As TreeViewEventArgs) Handles TreeViewSpielen.AfterSelect
    2. Dim Node As TreeNode = eventArgs.Node
    3. frmSpielen.Hide() 'Hide war vorher Close, dadurch wurde aber die Form disposed. frmspielen.Definstance.hide gelöscht
    4. frmBerichte.Hide()
    5. frmAbsatzGesamt.Hide()
    6. frmAbsatzStrom.Hide()
    7. frmAbsatzWaerme.Hide()
    8. frmBeschaffungProduktionGesamt.Hide()
    9. frmBeschaffungProduktionStrom.Hide()
    10. frmBeschaffungProduktionWaerme.Hide()
    11. frmBeschaffungKostenGesamt.Hide()
    12. frmBeschaffungKostenStrom.Hide()
    13. frmBeschaffungKostenWaerme.Hide()
    14. frmRechnungswesen.Hide()
    15. frmGuV.Hide()
    16. frmGewinnverwendung.Hide()
    17. frmBilanz.Hide()
    18. frmFinanzfluss.Hide()
    19. frmEntscheidung.Hide()
    20. frmVorhAnlagen.Hide()
    21. frmAnlageBauen.Hide()
    22. frmKapitalAufnehmen.Hide()
    23. frmKapitalAnlegen.Hide()
    24. frmPeriodeBeenden.Hide()
    25. If Node.Name = "A1" Then frmSpielen.Show() 'Definstance weggenommen?!
    26. If Node.Name = "B1" Then frmBerichte.Show()
    27. If Node.Name = "C11" Then frmAbsatzGesamt.Show()
    28. If Node.Name = "D111" Then frmAbsatzStrom.Show()
    29. If Node.Name = "D112" Then frmAbsatzWaerme.Show()
    30. If Node.Name = "C12" Then frmBeschaffungProduktionGesamt.Show()
    31. If Node.Name = "D121" Then frmBeschaffungProduktionStrom.Show()
    32. If Node.Name = "D122" Then frmBeschaffungProduktionWaerme.Show()
    33. If Node.Name = "C13" Then frmBeschaffungKostenGesamt.Show()
    34. If Node.Name = "D131" Then frmBeschaffungKostenStrom.Show()
    35. If Node.Name = "D132" Then frmBeschaffungKostenWaerme.Show()
    36. If Node.Name = "B2" Then frmRechnungswesen.Show()
    37. If Node.Name = "C21" Then frmGuV.Show()
    38. If Node.Name = "C22" Then frmGewinnverwendung.Show()
    39. If Node.Name = "C23" Then frmBilanz.Show()
    40. If Node.Name = "C24" Then frmFinanzfluss.Show()
    41. If Node.Name = "B4" Then frmEntscheidung.Show()
    42. If Node.Name = "C41" Then frmVorhAnlagen.Show()
    43. If Node.Name = "C42" Then frmAnlageBauen.Show()
    44. If Node.Name = "C43" Then frmKapitalAufnehmen.Show()
    45. If Node.Name = "C44" Then frmKapitalAnlegen.Show()
    46. If Node.Name = "A2" Then frmPeriodeBeenden.Show()
    47. End Sub
    48. End Class
    Ich hab jetzt mal alle 85 DefInstance von frmTree gelöscht. Auf den wird in jeder frm zugegriffen weil der Tree dann immer aktualisiert wird.

    Jetzt bekomme ich wenn ich auf den Button für frmTree.Show() klicke folgende Fehlermeldung:

    System.InvalidOperationException wurde nicht behandelt.
    Message=Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Fehler beim Erstellen des Formulars. Weitere Informationen finden Sie in Exception.InnerException. Fehler: Das Formular hat während der Erstellung ausgehend von einer Standardinstanz auf sich selbst verwiesen. Dies führte zu einer Endlosschleife. Verweisen Sie im Konstruktor des Formulars mithilfe von "Me" auf das Formular...


    Wie finde ich weitere Informationen in Exception.Innerexcpetion?

    Roro schrieb:

    Das Formular hat während der Erstellung ausgehend von einer Standardinstanz auf sich selbst verwiesen

    Erstmal scheint der Upgrade Wizard hier mal kräftig daneben gegriffen zu haben. Wie weit er auch in der Designer-VB Mist gebaut hat kann man hier ja soweit noch garnicht sehen.

    Die Fehlermeldung oben kommt normalerweise dann, wenn man z.B. in der Form1 eigene Methoden nicht mit Me.methodenname anspricht , sondern mit Form1.methodenname. Schau Dir an wo soetwas vorkommt und ändere es in ME.

    Innere Exception erhälst Du in der Fehlermeldung wenn Du auf Details gehst und die Plus-Zeichen anclickst.
    Ja, danke damit hab ich es irgendwie gelöst. Allerdings verzweifle ich jetzt einfach wieder an diesem dreckigen InitializeComponent(). Dabei hab ich GARNICHTS geändert und aufeinmal kommt es wieder. Hier hatte ich das schonmal.
    Allerdings glaub ich jetzt zu wissen woran es liegt. Das ganze spielt sich hier ab:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict Off
    2. Option Explicit On
    3. Imports Artinsoft.VB6.Utils
    4. Imports System
    5. Imports System.Windows.Forms
    6. Friend Partial Class frmBeschaffungProduktionStrom
    7. Inherits System.Windows.Forms.Form
    8. Private Sub cmdWeiterC12_Click(ByVal eventSender As Object, ByVal eventArgs As EventArgs) Handles cmdWeiterC12.Click
    9. frmBeschaffungProduktionWaerme.DefInstance.Show()
    10. Me.Hide()
    11. End Sub
    12. 'UPGRADE_WARNING: (2080) Form_Load event wurde auf Form_Load event aktualisiert und weist ein neues Verhalten auf. Weitere Informationen: http://www.vbtonet.com/ewis/ewi2080.aspx
    13. Private Sub frmBeschaffungProduktionStrom_Load(ByVal eventSender As Object, ByVal eventArgs As EventArgs) Handles MyBase.Load
    14. Dim SummeLeistung As Object
    15. Dim LiItem As ListViewItem 'wird für die SubItems der ListView benötigt
    16. 'Formulargröße einstellen
    17. Me.Left = VB6.TwipsToPixelsX(3735)
    18. Me.Top = 0
    19. Me.Width = VB6.TwipsToPixelsX(VB6.PixelsToTwipsX(MDIfrmStart.DefInstance.Width) - VB6.PixelsToTwipsX(frmTree.Width) - 200)
    20. Me.Height = frmTree.DefInstance.Height
    21. 'den TreeView aktualisieren
    22. frmTree.DefInstance.TreeViewSpielen.SelectedNode = frmTree.DefInstance.TreeViewSpielen.Nodes.Item("D121")
    23. 'Werte in die Textfelder einstellen
    24. txtPeriode.Text = CStr(Periode - 1)
    25. 'Die WärmeKW's speisen auch Strom ein und werden daher mit aufgelistet
    26. 'TODO Alle Subitems 0 macht keinen Sinn?! Alles wird überschrieben, checken was da wirklich steht!
    27. For Lauf As Integer = 1 To AnzahlWaermeKW
    28. If WaermeKW(Lauf).EinspeisungStromGWH > 0 Then
    29. LiItem = ListViewKW.Items.Add(WaermeKW(Lauf).Name)
    30. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).EinspeisungStromGWH / 1000, "#,##0")
    31. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).LeistungMW * WaermeKW(Lauf).Kopplungszahl / 100, "#,##0")
    32. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).Verfuegbarkeit / 100 * Periodenlänge, "#,##0")
    33. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).Verfuegbarkeit, "#,##0")
    34. End If
    35. ' ***********************
    36. Next Lauf
    37. For Lauf As Integer = 1 To AnzahlKW
    38. ' Neu !!!!!!!!!!!!!!!
    39. If KWEinspeisung(Lauf) > 0 Then
    40. LiItem = ListViewKW.Items.Add(KWName(Lauf))
    41. LiItem.SubItems(0).Text = StringsHelper.Format(KWEinspeisung(Lauf) / 1000, "#,##0")
    42. LiItem.SubItems(0).Text = StringsHelper.Format(KWLeistung(Lauf), "#,##0")
    43. LiItem.SubItems(0).Text = StringsHelper.Format(KWVerfügbarkeiten(Periode - 1, Lauf) / 100 * Periodenlänge, "#,##0")
    44. LiItem.SubItems(0).Text = StringsHelper.Format(KWVerfügbarkeiten(Periode - 1, Lauf), "#,##0")
    45. End If
    46. ' ***********************
    47. Next Lauf
    48. LiItem = ListViewKW.Items.Add("Hilfsbezug")
    49. LiItem.SubItems(0).Text = StringsHelper.Format(GesamtHilfsbezug / 1000, "#,##0")
    50. 'LiItem.SubItems(2) = Format(KWLeistung(Lauf), "#,##0")
    51. 'LiItem.SubItems(3) = Format(KWVerfügbarkeiten(Periode - 1, Lauf) / 100 * Periodenlänge, "#,##0")
    52. LiItem.SubItems(0).Text = StringsHelper.Format(100, "#,##0")
    53. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    54. SummeLeistung = 0
    55. For Lauf As Integer = 1 To AnzahlWaermeKW
    56. If WaermeKW(Lauf).Aktiv Then
    57. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Double erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    58. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    59. SummeLeistung = CDbl(SummeLeistung) + (WaermeKW(Lauf).LeistungMW * WaermeKW(Lauf).Kopplungszahl / 100)
    60. End If
    61. Next Lauf
    62. For Lauf As Integer = 1 To AnzahlKW
    63. If KWAktiv(Periode - 1, Lauf) Then
    64. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Double erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    65. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    66. SummeLeistung = CDbl(SummeLeistung) + KWLeistung(Lauf)
    67. End If
    68. Next Lauf
    69. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Scalar erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    70. txtLeistungGesamt.Text = StringsHelper.Format(SummeLeistung, "#,##0")
    71. txtEinspeisungGesamt.Text = StringsHelper.Format((GesamtEinspeisung + GesamtHilfsbezug) / 1000, "#,##0")
    72. LiItem = Nothing
    73. End Sub
    74. End Class



    aber wichtig ist nur der Teil:

    VB.NET-Quellcode

    1. 'Werte in die Textfelder einstellen
    2. txtPeriode.Text = CStr(Periode - 1)
    3. 'Die WärmeKW's speisen auch Strom ein und werden daher mit aufgelistet
    4. 'TODO Alle Subitems 0 macht keinen Sinn?! Alles wird überschrieben, checken was da wirklich steht!
    5. For Lauf As Integer = 1 To AnzahlWaermeKW
    6. If WaermeKW(Lauf).EinspeisungStromGWH > 0 Then
    7. LiItem = ListViewKW.Items.Add(WaermeKW(Lauf).Name)
    8. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).EinspeisungStromGWH / 1000, "#,##0")
    9. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).LeistungMW * WaermeKW(Lauf).Kopplungszahl / 100, "#,##0")
    10. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).Verfuegbarkeit / 100 * Periodenlänge, "#,##0")
    11. LiItem.SubItems(0).Text = StringsHelper.Format(WaermeKW(Lauf).Verfuegbarkeit, "#,##0")
    12. End If
    13. ' ***********************
    14. Next Lauf
    15. For Lauf As Integer = 1 To AnzahlKW
    16. ' Neu !!!!!!!!!!!!!!!
    17. If KWEinspeisung(Lauf) > 0 Then
    18. LiItem = ListViewKW.Items.Add(KWName(Lauf))
    19. LiItem.SubItems(0).Text = StringsHelper.Format(KWEinspeisung(Lauf) / 1000, "#,##0")
    20. LiItem.SubItems(0).Text = StringsHelper.Format(KWLeistung(Lauf), "#,##0")
    21. LiItem.SubItems(0).Text = StringsHelper.Format(KWVerfügbarkeiten(Periode - 1, Lauf) / 100 * Periodenlänge, "#,##0")
    22. LiItem.SubItems(0).Text = StringsHelper.Format(KWVerfügbarkeiten(Periode - 1, Lauf), "#,##0")
    23. End If
    24. ' ***********************
    25. Next Lauf
    26. LiItem = ListViewKW.Items.Add("Hilfsbezug")
    27. LiItem.SubItems(0).Text = StringsHelper.Format(GesamtHilfsbezug / 1000, "#,##0")
    28. 'LiItem.SubItems(2) = Format(KWLeistung(Lauf), "#,##0")
    29. 'LiItem.SubItems(3) = Format(KWVerfügbarkeiten(Periode - 1, Lauf) / 100 * Periodenlänge, "#,##0")
    30. LiItem.SubItems(0).Text = StringsHelper.Format(100, "#,##0")


    Ich habe alle Werte der LiItem.Subitems auf 0 gesetzt weil er immer meckert wenn ich Ihn auf irgendeine andere Zahl setze dass diese für den Index nicht gültig ist. Dann lief es auch alles, die Werte standen halt alle in der ersten Zeile. Das soll natürlich nicht so sein.
    Ist die Formulierung irgendwie falsch oder so? Ich hab es in 2 Büchern nachgelesen und da werden der Index auch von 0 an hochgezählt einfach?!
    Komischerweise kommt der InitializeComponent() jetzt auch wenn ich alles auf 0 setze... Aber wenn ich das richtig code, kommt auch der InitializeComponent() nicht mehr... hoffe/glaube ich :cursing:
    Hab ich gemacht, hat leider nicht geklappt. Es ist so bitter da es eben ja einfach lief.

    EDIT: ich habe mal alle frms (2) mit listviews einfach weggekommentiert, komplett auch den Designer Code... dann lässt es sich starten und der Treeview wird angezeigt. Es liegt also aufjedenfall irgendwie an diesem listview X(

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Roro“ ()

    Alle Schleifen? also die beiden LiItem ja sowieso, aber die beiden hier auch? (hab ich jetzt schonmal gemacht)

    VB.NET-Quellcode

    1. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    2. SummeLeistung = 0
    3. For Lauf As Integer = 0 To AnzahlWaermeKW - 1
    4. If WaermeKW(Lauf).Aktiv Then
    5. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Double erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    6. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    7. SummeLeistung = CDbl(SummeLeistung) + (WaermeKW(Lauf).LeistungMW * WaermeKW(Lauf).Kopplungszahl / 100)
    8. End If
    9. Next Lauf
    10. For Lauf As Integer = 0 To AnzahlKW - 1
    11. If KWAktiv(Periode - 1, Lauf) Then
    12. 'UPGRADE_WARNING: (1068) SummeLeistung vom Typ "Variant" wird für Double erzwungen. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1068.aspx
    13. 'UPGRADE_WARNING: (1037) Die Standardeigenschaft von Objekt "SummeLeistung" konnte nicht aufgelöst werden. Weitere Informationen: http://www.vbtonet.com/ewis/ewi1037.aspx
    14. SummeLeistung = CDbl(SummeLeistung) + KWLeistung(Lauf)
    15. End If
    16. Next Lauf


    Leider klappt es damit immernoch nicht...