UF Bezahlen
#1
Hallo Experten,
erstmal ein Frohes Neues Jahr.

Habe das Problem mit der UF Bezahlen, dort wird nicht immer richtig gerechnet und in der Übersicht eingetragen. Das Problem tritt nicht immer auf! Was auch neu ist, wenn der betrag abgerechnet ist sollte in der Celle nichts mehr stehen, jetzt steht aber -0,00 was nicht richtig ist. Hier erstmal der Code um den es geht.

Code:
Private Sub CmbBezahlen_Click()
   Dim dblwert As Double, dblSumm As Double, Gast As Double, rest As Double
   Dim lngLastRow As Long
   Dim lngC As Long
   Dim lngA As Long, lngB As Long, lngD As Long
   Dim wksSheet As Worksheet
   Dim wksSrc As Excel.Worksheet
   Dim rngBereich As Range                     'diese Variable neu eingefügt
   Dim rngDatum As Range
   Set wksSheet = Worksheets("Übersicht")
  
   If Me.ComboBox1.ListIndex < 0 Then
      MsgBox "Bitte Namen auswählen"
      Exit Sub
   End If
  
   If Einzahlung.Value = "" Then
      MsgBox "Keinen Betrag eingegeben"
      Exit Sub
   End If
      
   If Not IsNumeric(Einzahlung.Value) Then
      MsgBox "Falsche Eingabe "
      Exit Sub
   End If
  
   dblwert = CDbl(Einzahlung.Value)
  
   EinZahl = Einzahlung
  
  
  
   lngLastRow = wksSheet.Cells(Rows.Count, 1).End(xlUp).Row + 1
  
  If Me.ComboBox1 = ("GÄSTE") Then                                                  'Für Gäste Abrechnung
  Set wksSrc = ThisWorkbook.Worksheets("Startblatt")
'********* Abfrage ob Pärchen*************
    If AwPärchen.Value = True Then
'++++++++++Werte aus TextBoxen von minus in Plus umwandeln+++++++++++++++
        Gast = CDbl(TextBox5.Value) - CDbl(TextBox5.Value) - CDbl(TextBox5.Value) + _
               CDbl(TextBox6.Value) - CDbl(TextBox6.Value) - CDbl(TextBox6.Value)
    Else
    
        Gast = CDbl(TextBox5.Value) - CDbl(TextBox5.Value) - CDbl(TextBox5.Value)
    End If

    If TextBox4.Value = "0,00 €" Then
        MsgBox "Der Betrag wird bei Gästen gebucht", vbInformation, "Kegler"
        wksSheet.Cells(lngLastRow - 1, 56) = wksSheet.Cells(lngLastRow - 1, 56) + CDbl(Einzahlung.Value)
        wksSrc.Range("AG15").Offset(1 + ComboBox3.ListIndex).Value = "x"
        
    Else
        If CDbl(Einzahlung.Value) <= Gast Then
            MsgBox "Bertag zu gering, kann so Nicht gebucht werden!", vbInformation, "Kegler"
        Exit Sub
        End If
        
        MsgBox "Der Betrag wird bei Gästen gebucht", vbInformation, "Kegler"
        wksSheet.Cells(lngLastRow - 1, 56) = wksSheet.Cells(lngLastRow - 1, 56) + CDbl(Einzahlung.Value) - TextBox4.Value
        wksSrc.Range("AG15").Offset(1 + ComboBox3.ListIndex).Value = "x"
    End If
     If Me.ComboBox4.ListIndex > -1 Then
          wksSrc.Range("AG15").Offset(1 + ComboBox4.ListIndex).Value = "x"
     End If
  End If
  
  If Me.ComboBox2 = ("GÄSTE") Then                                                  'wird gebraucht wenn Spieler und Gast
    If TextBox6 < 0 Then
  
  Set wksSrc = ThisWorkbook.Worksheets("Startblatt")
    Gast = CDbl(TextBox6.Value) - CDbl(TextBox6.Value) - CDbl(TextBox6.Value)       'einen minus wert in Plus wert umwandeln
        If CDbl(Einzahlung.Value) < Gast Then
            MsgBox "Bertag zu gering, kann so Nicht gebucht werden!", vbInformation, "Kegler"
            Exit Sub
        End If
        
        MsgBox "Der Betrag wird bei Gästen gebucht", vbInformation, "Kegler"
        wksSheet.Cells(lngLastRow - 1, 56) = wksSheet.Cells(lngLastRow - 1, 56) + Gast
        wksSrc.Range("AG15").Offset(1 + ComboBox4.ListIndex).Value = "x"
        dblwert = CDbl(Einzahlung) - CDbl(Gast)
     End If
    End If
  
   With ListBox1            'ERST die Kegelbahn abrechnen
      For lngC = 0 To .ListCount - 1
         lngA = .List(lngC, 2)
         lngD = .List(lngC, 6)
         If dblwert < Abs(wksSheet.Cells(lngA, lngD).Value) Then
            wksSheet.Cells(lngA, 58).Value = _
            wksSheet.Cells(lngA, 58).Value + dblwert
            wksSheet.Cells(lngA, lngD).Value = _
            wksSheet.Cells(lngA, lngD).Value + dblwert
            dblwert = 0
            Exit For
         Else
    dblwert = dblwert + wksSheet.Cells(lngA, lngD).Value
    wksSheet.Cells(lngA, 58).Value = _
    wksSheet.Cells(lngA, 58).Value + Abs(wksSheet.Cells(lngA, lngD).Value)
    wksSheet.Cells(lngA, lngD).Value = ""
         End If
      Next lngC
   End With
  
   With ListBox1        'DANN Beitrag abrechnen
         For lngC = 0 To .ListCount - 1
         lngA = .List(lngC, 2)
         lngB = .List(lngC, 3)
        
        If dblwert < Abs(wksSheet.Cells(lngA, lngB).Value) Then
            wksSheet.Cells(lngA, lngB - 1).Value = _
            wksSheet.Cells(lngA, lngB - 1).Value + dblwert
            wksSheet.Cells(lngA, lngB).Value = _
            wksSheet.Cells(lngA, lngB).Value + dblwert
            'rest = Abs(wksSheet.Cells(lngA, lngB))
            
            'If Abs(wksSheet.Cells(lngA, lngB)) = 0 Then
                'wksSheet.Cells(lngA, lngB).Value = ""
            'Stop
            'End If
            
            dblwert = 0
            Exit For
         Else
            dblwert = dblwert + wksSheet.Cells(lngA, lngB).Value
            wksSheet.Cells(lngA, lngB - 1).Value = _
            wksSheet.Cells(lngA, lngB - 1).Value + Abs(wksSheet.Cells(lngA, lngB).Value)
            wksSheet.Cells(lngA, lngB).Value = ""
         End If
      Next lngC
   End With
  
   If CDbl(TextBox4.Value) > 0 And AwSpende Then
      MsgBox "Der Betrag wird gespendet", vbInformation, "Kegler"
      wksSheet.Cells(lngLastRow - 1, 60) = wksSheet.Cells(lngLastRow - 1, 60) + CDbl(TextBox4.Value)
   End If

   If dblwert > 0 Then Einzahlung.Value = dblwert
'######TextBox5 nach Buchen neu einlesen######
   If Me.ComboBox1 = ("GÄSTE") Then
        TextBox5.Value = Format$(wksSrc.Range("AF15").Offset(1 + ComboBox3.ListIndex).Value, "#,##0.00 €")
        Einzahlung.Enabled = False               'Eingabe Sperren
    If AwPärchen.Value = True Then
'######Wenn Gäste Pärchen auswahl########
            TextBox6.Value = Format$(wksSrc.Range("AF15").Offset(1 + ComboBox4.ListIndex).Value, "#,##0.00 €")
    End If
Exit Sub
   End If
'######Wenn bezahlt, im Startblatt ein x setzen##########
  
'Testbereich
        
Set rngBereich = Worksheets("Startblatt").Columns(2).Find(ComboBox1.Value, LookIn:=xlValues, lookat:=xlWhole)
        rngBereich.Offset(0, 31).Value = "x"
        With Worksheets("Übersicht")
                
        lngLastRow = Cells(.Rows.Count, 1).End(xlUp).Row

        
        'Schleife von 1 bis letzte beschriebene Splate sucht den Namen welcher bezahlen muss
        For a = 1 To Sheets("Übersicht").Cells(1, Columns.Count).End(xlToLeft).Column
        
            If Cells(4, a) = ComboBox1 Then Exit For
    
        Next
        
        
        'Wenn dieser Name gefunden wurde schreibe 5 Zeilen später in die letzte Zeile das Datum
        Cells(lngLastRow, a + 5) = Date
        Cells(lngLastRow, a + 4) = Format(CDbl(Einzahlung), "#,##0.00 ")
        End With
      
   Einzahlung = ""
   ComboBox1_Change
   If AwPärchen.Value Then ComboBox2_Change
  
End Sub

Nun noch ein Beispiel:
Name Andrea in der UF auswählen, dann in der TextBox3 einen wert eingeben z.B. 6,35, Button Bezahlen drücken. Jezt werden in der Tabelle Übersicht die Werte aus Spalte D in Spalte BF eingetragen und Spalte C in B. Nun sollte in der Spalte C Nichts mehr stehen, aber bei mir steht dann -0,00
Bitte Testet mal durch


Angehängte Dateien
.xlsm   Kegeln_Test4.xlsm (Größe: 313,93 KB / Downloads: 14)
mfg
Michael
:98:

WIN 10  Office 2019
Top
#2
Hallo Michael,

Cells(lngLastRow, a + 4) = CDbl(Einzahlung)

Gruß Uwe
Top
#3
Hallo Uwe!

Danke für die schnelle Antwort. Das ist die Lösung für ein andere Baustelle die ich noch hatte.
Ich denke das Problem was ich noch habe, liegt in den Bereich.

Code:
With ListBox1        'DANN Beitrag abrechnen
         For lngC = 0 To .ListCount - 1
         lngA = .List(lngC, 2)
         lngB = .List(lngC, 3)
        
         If dblwert < Abs(wksSheet.Cells(lngA, lngB).Value) Then
            wksSheet.Cells(lngA, lngB - 1).Value = _
            wksSheet.Cells(lngA, lngB - 1).Value + dblwert
            wksSheet.Cells(lngA, lngB).Value = _
            wksSheet.Cells(lngA, lngB).Value + dblwert
            'rest = Abs(wksSheet.Cells(lngA, lngB))
            
            'If Abs(wksSheet.Cells(lngA, lngB)) = 0 Then
                'wksSheet.Cells(lngA, lngB).Value = ""
            'Stop
            'End If
            
            dblwert = 0
            Exit For
         Else
            dblwert = dblwert + wksSheet.Cells(lngA, lngB).Value
            wksSheet.Cells(lngA, lngB - 1).Value = _
            wksSheet.Cells(lngA, lngB - 1).Value + Abs(wksSheet.Cells(lngA, lngB).Value)
            wksSheet.Cells(lngA, lngB).Value = ""
         End If
Was ich noch vergessen hatte:
Bei jeden neuen Test sollten die x im Startblatt (AG) gelöscht werden.
Ich lösche dann noch in der Übersicht die letzte Zeile.
mfg
Michael
:98:

WIN 10  Office 2019
Top


Gehe zu:


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