Falsche Zusammensetzung in MsgBox
#1
Hallo!

Ich habe folgendes Problem. In einer MsgBox sollen Werte angezeigt, leider passt die Zusammensetzung nicht ganz und ich schaffe es einfach nicht.
Hier einmal mein Code:

Code:
Private Sub ComboBox2_Change()

Dim i As Integer
Dim Inhalt As String

Set Suche = ThisWorkbook.Worksheets("Top30 - Teil 1").Columns("Q").Find(What:=ComboBox2.Value, LookAt:=xlWhole)
Set Suche2 = ThisWorkbook.Worksheets("Auszahlungen").Columns("P").Find(What:=ComboBox2.Value, LookAt:=xlWhole)
Set Suche3 = ThisWorkbook.Worksheets("Auszahlungen").Columns("P").Find(What:=ComboBox2.Value, LookAt:=xlWhole)

If Not Suche3 Is Nothing Then
    For i = 180 To 251
        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) = 1 Then
            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlung)")
           
        Else
       
        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) > 1 Then
            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlungen)")
       
        End If
        End If
    Next i
End If

If Not Suche2 Is Nothing Then
    For i = 17 To 88
        If Worksheets("Auszahlungen").Cells(Suche2.Row, i) <> 0 Then
            Inhalt2 = Inhalt2 & Chr(10) & Year(Worksheets("Auszahlungen").Cells(1, i)) & ":  " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, i), "€ #,##0.00") & Inhalt3
        End If
    Next i
End If

If Worksheets("Auszahlungen").Cells(Suche2.Row, "CW") = 1 Then 'nur 1 Auszahlungsjahr für Jahresvergleich'

    MsgBox "Jahresverdienst zu """ & ComboBox2.Value & """:" & String(2, vbNewLine) & _
    Inhalt2 & String(2, vbNewLine) & _
    Worksheets("Top30 - Teil 1").Cells(Suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
    "Ø Verdienst pro Jahr: € " & Format(Cells(Suche.Row, "AS"), "#,##0.00") & String(1, vbNewLine) & _
    "Gesamtverdienst: € " & Cells(Suche.Row, "BO")
       
Else

If Worksheets("Auszahlungen").Cells(Suche2.Row, "CW") > 1 And Year(Worksheets("Auszahlungen").Cells(Suche2.Row, "CT")) <> Year(Date) Then 'mehr als 1 Auszahlungsjahr für Jahresvergleich und höchster Jahresverdienst ist nicht aktuelles Jahr'

    MsgBox "Jahresverdienste zu """ & ComboBox2.Value & """:" & String(2, vbNewLine) & _
    Inhalt2 & String(2, vbNewLine) & _
    "höchster Jahresverdienst war im Jahr " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, "CT"), "YYYY") & " mit € " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, "CS"), "#,##0.00") & String(2, vbNewLine) & _
    Worksheets("Top30 - Teil 1").Cells(Suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
    "Ø Verdienst pro Jahr: € " & Format(Cells(Suche.Row, "AS"), "#,##0.00") & String(1, vbNewLine) & _
    "Gesamtverdienst: € " & Cells(Suche.Row, "BO")

Else

If Worksheets("Auszahlungen").Cells(Suche2.Row, "CW") > 1 And Year(Worksheets("Auszahlungen").Cells(Suche2.Row, "CT")) = Year(Date) Then 'mehr als 1 Auszahlungsjahr für Jahresvergleich und höchster Jahresverdienst ist aktuelles Jahr'

    MsgBox "Jahresverdienste zu """ & ComboBox2.Value & """:" & String(2, vbNewLine) & _
    Inhalt2 & String(2, vbNewLine) & _
    "höchster Jahresverdienst ist dieses Jahr mit € " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, "CS"), "#,##0.00") & String(2, vbNewLine) & _
    Worksheets("Top30 - Teil 1").Cells(Suche.Row, "P") & ". Rang nach Beträgen" & String(1, vbNewLine) & _
    "Ø Verdienst pro Jahr: € " & Format(Cells(Suche.Row, "AS"), "#,##0.00") & String(1, vbNewLine) & _
    "Gesamtverdienst: € " & Cells(Suche.Row, "BO")
   
End If
End If
End If

End Sub


Nun ist es so, dass die Werte von Inhalt3 nicht richtig aufbereitet werden bzw. dann in der Msgbox nicht richtig angezeigt werden, so wie ich das will.
Ich möchte nämlich (siehe Screenshot), dass im Jahr 2021 2 Auszahlungen steht, im Jahr 2022 4 Auszahlungen und im Jahr 2023 3 Auszahlungen steht.
Derzeit werden nämlich immer alle Inhalte von Inhalt3 pro Zeile angezeigt, was ich nicht will. Es soll nämlich immer nur ein Wert (Summe und Auszahlungen) pro Jahr angezeigt werden.
Mir ist natürlich bewusst, dass der Fehler bei mir liegt, aber ich schaffe es leider nicht.

Ich hoffe, dass mir jemand helfen kann.


Angehängte Dateien Thumbnail(s)
   
Excel Version 2016
Antworten Top
#2
Hallo,

Suche2 und Suche3 sind identisch!

Gruß, Uwe
Antworten Top
#3
ja, oben bei "set", aber das brauche ich ja für unten, sonst kommt "Objekt erforderlich, wenn ich es bei oben bei "set" entferne
Excel Version 2016
Antworten Top
#4
Hallo derTommy,

der Fehler liegt hier:
Code:
    For i = 180 To 251
        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) = 1 Then
            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlung)")
           
        Else
       
        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) > 1 Then
            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlungen)")
       
        End If
        End If
    Next i
Du füllst Inhalt3 mit einem String, beim nächsten Durchlauf erweiterst Du den String um einen weiteren String.
Richtig wäre, die Werte der Zellen (Suche3.Row, i) zu addieren und abschließend (wahrscheinlich in der MessageBox zu formatieren.

Warum hast Du eigentlich zwei If-Abfragen? Eine mit >= müsste doch reichen.

Übrigens solltest Du zu Beginn deines Codes alle Variablen deklarieren (dazu ein Option explicit an den Beginn jedes Moduls (gibt's auch als Voreinstellung), damit Du dazu verpflichtet wirst). Dabei als Präfix die Art der Deklarierung voransetzen (z.B. str für String, int für Integer). Dann weißt Du auch in deinem Code immer, mit was für einer Art Variablen Du hantierst.

Gruß,
Lutz

Außerdem könntest Du entsprechend Kuwer's Anmerkung die Variable Suche 3 sparen und beide "If not Suche..."-Abfragen in eine zusammenfassen.
Antworten Top
#5
Ich hätte eh gerne die eine "If not Suche .." Abfrage einsparen, aber leider bekomme ich es nicht zusammen.
Darum bräuchte ich ja bitte eure Hilfe.
Excel Version 2016
Antworten Top
#6
Wo ist das Problem?
Diese beiden Zeilen löschen (End if des ersten If not... und Anfang des zweiten If not...)
Code:
End If

If Not Suche2 Is Nothing Then
und es sollte passen, oder?
Antworten Top
#7
ja, das passt eh, aber mein Problem ist deswegen auch nicht behoben
Excel Version 2016
Antworten Top
#8
Hallo dertommy,

nachdem ich jetzt nicht weiß, was Du probiert hast oder auch nicht, hier ein Code-Versuch:
Code:
Dim intInhalt3 As Integer

If Not Suche3 Is Nothing Then
    For i = 180 To 251
'        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) = 1 Then
'            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlung)")
'
'        Else
'
'        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) > 1 Then
'            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlungen)")
'
'        End If
'        End If
        intInhalt3 = intInhalt3 + Worksheets("Auszahlungen").Cells(Suche3.Row, i).Value
   
    Next i
End If

If Not Suche2 Is Nothing Then
    For i = 17 To 88
        If Worksheets("Auszahlungen").Cells(Suche2.Row, i) <> 0 Then
'            Inhalt2 = Inhalt2 & Chr(10) & Year(Worksheets("Auszahlungen").Cells(1, i)) & ":  " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, i), "€ #,##0.00") & Inhalt3
            Inhalt2 = Inhalt2 & Chr(10) & Year(Worksheets("Auszahlungen").Cells(1, i)) & ":  " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, i), "€ #,##0.00") & Chr(10) & intInhalt3 & " Auszahlungen"
        End If
    Next i
End If
Nachdem eine Beispieldatei fehlt, natürlich ungetestet.

Gruß,
Lutz
Antworten Top
#9
Hallo Lutz!

Danke für den Code. Leider macht er nicht das, was ich will.
Er bildet nun die Summe von den Auszahlungen, was ich nicht will.
Ich möchte nämlich, dass im Jahr 2021 in Klammer 2 Auszahlungen steht, im Jahr 2022 4 Auszahlungen und im Jahr 2023 3 Auszahlungen.
Wenn ich deinen Code anwende, steht unterhalb vom Jahr immer die Zahl 9, was falsch ist.

Anbei mein aktueller Code:

Code:
Dim i As Integer
Dim Inhalt As String
Dim intInhalt3 As Integer

Set Suche = ThisWorkbook.Worksheets("Top30 - Teil 1").Columns("Q").Find(What:=ComboBox2.Value, LookAt:=xlWhole)
Set Suche2 = ThisWorkbook.Worksheets("Auszahlungen").Columns("P").Find(What:=ComboBox2.Value, LookAt:=xlWhole)
Set Suche3 = ThisWorkbook.Worksheets("Auszahlungen").Columns("P").Find(What:=ComboBox2.Value, LookAt:=xlWhole)

If Not Suche3 Is Nothing Then
    For i = 180 To 251
'        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) = 1 Then
'            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlung)")
'
'        Else
'
'        If Worksheets("Auszahlungen").Cells(Suche3.Row, i) > 1 Then
'            Inhalt3 = Inhalt3 & "  (" & Format(Worksheets("Auszahlungen").Cells(Suche3.Row, i), "0 Auszahlungen)")
'
'        End If
'        End If
        intInhalt3 = intInhalt3 + Worksheets("Auszahlungen").Cells(Suche3.Row, i).Value
   
    Next i
End If

If Not Suche2 Is Nothing Then
    For i = 17 To 88
        If Worksheets("Auszahlungen").Cells(Suche2.Row, i) <> 0 Then
'            Inhalt2 = Inhalt2 & Chr(10) & Year(Worksheets("Auszahlungen").Cells(1, i)) & ":  " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, i), "€ #,##0.00") & Inhalt3
            Inhalt2 = Inhalt2 & Chr(10) & Year(Worksheets("Auszahlungen").Cells(1, i)) & ":  " & Format(Worksheets("Auszahlungen").Cells(Suche2.Row, i), "€ #,##0.00") & Chr(10) & intInhalt3 & " Auszahlungen"
        End If
    Next i
End If


Ich hoffe, dass du mir nochmals helfen kannst.

Anbei ein Screenshot vom Ergebnis.


Angehängte Dateien Thumbnail(s)
   
Excel Version 2016
Antworten Top
#10
Ok, liegt daran, dass deine Auszahlungen dem richtigen Jahr zugeordnet werden müssen. Aber das hat dein alter Code natürlich auch nicht...

Gut, wenn Du eine Lösung benötigst, wirst Du um eine Beispieldatei nicht herumkommen.
Grundlegende Datenstruktur mit anonymisierten Daten.

Dann werden wir eine Lösung finden.

Gruß,
Lutz
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste