@ Frank (WergibtmirRat) Leider habe ich noch so meine Probleme mit den ID's, versuche es aber mit einzubauen.
@Stefan Erstmal Danke. Der Code funktioniert.
Zitat:Funktioniert nicht. Ich weiß jetzt auch nicht mehr, wo die Spende eingetragen werden soll bzw wie es bei der Auszahlung ist
. Sorry nur wieder die hälfte geschrieben. Sollte in der TextBox4 noch ein positiver Betrag stehen, kann man über die CheckBox2 anwählen ob dieser als Spende verbucht werden soll. Steht ein negativer Betrag dort und trotzdem die auswahl Spende getroffen ist darf der Betrag nicht gebucht werden. Der positive Betrag wird dann in der Übersicht Spalte AG (Einnahmen aus diversen und Spenden) eingetragen. z.B. am 1.1.2016 gibt Andrea,Gaby und Michael jeweils beim Bezahlen eine Spend insgesamt 2,55€. Dann steht in der Zeile 1.1.2016 und der Spalte AG ein betrag von 2,55€.
Auszahlung meinte ich mit: das der Restbetrag der übrig ist als Wechselgeld zurück geht
(20.08.2014, 10:22)michel34497 schrieb: z.B. am 1.1.2016 gibt Andrea,Gaby und Michael jeweils beim Bezahlen eine Spend insgesamt 2,55€. Dann steht in der Zeile 1.1.2016 und der Spalte AG ein betrag von 2,55€.
Welches Datum soll da genommen werden? Denn das aktuelle Datum aus dem Tabellenblatt Startblatt ist noch nicht in der Tabelle Übersicht enthalten. Ich habe mal die letzte beschriebene Zeile aus der Übersicht genommen.
Code:
Private Sub CommandButton1_Click() Dim dblwert As Double, dblSumm As Double Dim lngLastRow As Long Dim lngC As Long Dim lngA As Long, lngB As Long
Dim wksSheet As Worksheet
Set wksSheet = Worksheets("Übersicht") If Me.ComboBox1.ListIndex < 0 Then MsgBox "Bitte Namen auswählen" Exit Sub End If
If TextBox3.Value = "" Then MsgBox "Keinen Betrag eingegeben" Exit Sub End If
If Not IsNumeric(TextBox3.Value) Then MsgBox "Falsche Eingabe " Exit Sub End If
With ListBox1 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 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 CheckBox2 Then MsgBox "Der Betrag wird gespendet", vbInformation, "Kegler" wksSheet.Cells(lngLastRow - 1, 33) = wksSheet.Cells(lngLastRow - 1, 33) + CDbl(TextBox4.Value) End If
If dblwert > 0 Then TextBox3.Value = dblwert
' Me.ListBox1.Clear ComboBox1_Change If CheckBox1.Value Then ComboBox2_Change
End Sub
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28 • michel34497
Nach einigen Test's ist es genau das was ich erstmal wollte! Tausend Dank dafür, Ich werde das jetzt in die richtige Datei einbauen und nochmals dann testen. Melde mich morgen wieder, wie es weiter gehen soll.
Hallo Stefan und @ all! Nach dem ich den Code in die Datei eingebaut habe, wo auch Änderungen von mir mit eingbaut wurden funktioniert der Code zum Bezahlen nicht mehr.
Code:
Private Sub UserForm_Initialize() Dim lngC As Long 'Combobox so einlesen, damit keine leeren Listeneinträge vorkommen.
For lngC = 2 To 29 Step 3 ComboBox1.AddItem Cells(4, lngC) ComboBox2.AddItem Cells(4, lngC) Next lngC
End With With Me.ListBox2 .ColumnCount = 2 .ColumnWidths = "2cm;1,5cm;1,5cm"
End With
ComboBox2.Visible = False ListBox2.Visible = False CheckBox2.Visible = False End Sub Private Sub prcListboxEinlesen(lngLetzte As Long, cboAuswahlbox As ComboBox) Dim lngC As Long Dim rngBereich As Range 'diese Variable neu eingefügt Static dblSumme As Double Static dblKegel As Double Static lngA As Long 'aus einer mit Dim angelegten Variablen eine statische gemacht Static lngB As Long 'Static lngD As Long
'wenn es sich bei der Übergabe um die ComboBox1 handelt, setze Variable auf 0 If cboAuswahlbox = Me.ComboBox1 Then lngA = 0: dblSumme = 0: lngB = 0: dblKegel = 0 ': lngD = 0 For lngC = 5 To lngLetzte If Worksheets("Übersicht").Cells(lngC, cboAuswahlbox.ListIndex * 3 + 3) < 0 Then Me.ListBox1.AddItem Worksheets("Übersicht").Cells(lngC, 1).Value 'Datum wird in listbox1 eingetragen Me.ListBox1.Column(1, lngA) = Format(Worksheets("Übersicht").Cells(lngC, cboAuswahlbox.ListIndex * 3 + 3).Value, "#,##0.00 €") 'Betrag wird eingetragen dblSumme = dblSumme + Me.ListBox1.Column(1, lngA) 'Betrag wird addiert 'Me.ListBox1.Column(2, lngA) = lngC 'hier wird noch die Spalte eingefügt, aus der der Wert kommt 'Me.ListBox1.Column(3, lngA) = cboAuswahlbox.ListIndex * 3 + 3
Else dblKegel = dblKegel + Me.ListBox1.Column(2, lngB) 'dblKegel = dblKegel + Me.ListBox1.Column(4, lngD) lngA = lngA + 1 lngB = lngB + 1 'lndD = lngD + 1 End If End If Next lngC 'neuer Bereich 'vielleicht nicht mehr????? ' Set rngBereich = Worksheets("Startblatt").Columns(2).Find(cboAuswahlbox.Value, LookIn:=xlValues, lookat:=xlWhole) ' If Not rngBereich Is Nothing Then ' Me.ListBox1.AddItem Worksheets("Startblatt").Range("AI2").Value ' Me.ListBox1.Column(1, lngA) = Format(rngBereich.Offset(0, 30).Value, "#,##0.00 €") ' dblSumme = dblSumme + Me.ListBox1.Column(1, lngA) ' lngA = lngA + 1 'neu eingefügt, damit der Zähler korrekt funktioniert ' End If TextBox1.Value = Format(dblSumme, "#,##0.00 €") 'Betrag wird eingetragen TextBox2.Value = Format(dblKegel, "#,##0.00 €") 'Betrag wird eingetragen End Sub
So macht der Code (wie oben beschrieben) zum einlesen der ListBox1, wie ich das möchte alles richtig! Gebe ich nun einen wert in die TextBox3 ein und betätige dann den CommandButton1 funktioniert der Code unter CommandButton1 NICHT mehr!
Code:
Private Sub CommandButton1_Click() Dim dblwert As Double, dblSumm As Double Dim lngLastRow As Long Dim lngC As Long Dim lngA As Long, lngB As Long
Dim wksSheet As Worksheet
Set wksSheet = Worksheets("Übersicht") If Me.ComboBox1.ListIndex < 0 Then MsgBox "Bitte Namen auswählen" Exit Sub End If
If TextBox3.Value = "" Then MsgBox "Keinen Betrag eingegeben" Exit Sub End If
If Not IsNumeric(TextBox3.Value) Then MsgBox "Falsche Eingabe " Exit Sub End If
With ListBox1 For lngC = 0 To .ListCount - 1 [color=#FF0000]lngA = .List(lngC, 2) lngB = .List(lngC, 3)[/color] 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 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 CheckBox2 Then MsgBox "Der Betrag wird gespendet", vbInformation, "Kegler" wksSheet.Cells(lngLastRow - 1, 33) = wksSheet.Cells(lngLastRow - 1, 33) + CDbl(TextBox4.Value) End If
If dblwert > 0 Then TextBox3.Value = dblwert
' Me.ListBox1.Clear ComboBox1_Change If CheckBox1.Value Then ComboBox2_Change
End Sub
An den rot markierten stellen bleibt er hängen und sagt: Laufzeitfehler'94': Unzulässige Verwenung von Null
ist eigentlich ganz einfach. Die Spalten in der Listbox passen nicht mehr. In der von mir zuletzt geposteten Datei hatte die Listbox insgesamt 4 Spalten wovon nur 2 sichtbar waren. Die Listbox hatte folgende Aufteilung:
Spalte 1: Das Datum des Spieltags
Spalte 2: Der Betrag, der vom Spieltag noch zu zahlen ist
Jetzt die unsichtbaren Spalten
Spalte 3: die Zeile, in der der Minusbetrag steht
Spalte 4: die Spalte, in der der Minusbetrag steht
Und genau diese beiden zuletzt genannten Spalten braucht die Prozedur hinter den Button Bezahlen, um zu wissen, wo der Betrag steht. Gefüllt werden die beiden Spalten in der Prozedur prcListboxEinlesen. Du aber hast die beiden Codezeilen auskommentiert und dafür deine eigen Konstruktion eingefügt.
Wenn Du unbedingt deine Spaltenkonstruktion brauchst und auch in der Listbox sehen willst, könntest Du die beiden Spalten ausblenden. Klicke im VBA-Editor auf die Listbox und gehe im Eigenschaftsfenster (F4-Taste) auf die ColumnWidths-Eigenschaft und drücke die F1-Taste. In der Hilfe kannst Du lesen wie Du die Spalten ausblendest.
Gruß Stefan Win 10 / Office 2016
Folgende(r) 1 Nutzer sagt Danke an Steffl für diesen Beitrag:1 Nutzer sagt Danke an Steffl für diesen Beitrag 28 • michel34497
Hallo Stefan! Tausend Dank für den Tipp! :28: Sitzen (mit einen Kegelbruder) grade hier und Testen alles aus. Aber so wie es aussieht möchte er gerne noch einige Änderungen haben. Versuche aber erstmal das alleine zulösen!
Hallo Leute! Da isser wieder mit den nächsten fragen. Ich habe es jetzt so hinbekommen, dass der Code so bucht wie es erstmal sein sollte. Dank Stefan :100: Jetzt hänge ich aber wieder fest. Habe die UserForm bezahlen ein wenig umgebaut und erweitert. ich brauche jetzt erstmal folgendes: Wenn in ComboBox1 der Name Gäste ausgewählt wird, erscheint zusätlich in der UF die CB3 und TB5. In der CB3 sollen dann die Namen aus Tabelle Startblatt B16:B20 erscheinen. Ist ein Name aus CB3 angewählt soll in der TB5 der dazu gehörige Betrag aus Startblatt (AF16:AF20) angezeigt werden. Wird zusätzlich noch die CheckBox1 (Pärrchen) aktiviert erschein in der UF noch CB4 und TB6, wenn diese erscheinen soll das gleich gemacht werden wie eben bei CB3 + TB5 schon beschrieben. Hier komme ich nicht weiter ! Wenn dies gelöst ist soll wie folgt gebucht werden: Der betrag aus TB5 oder TB5+TB6 wird dann in TB1 dargestellt, wird dann ein betrag in TB3 eingegeben wird genauso gebucht als wenn ich ein Mitglied angewählt hätte mit den kleinen unterschied, das Kein Name gesucht werden muss sondern der Betrag immer in der Tabelle Übersicht in Spalte AC gebucht werden. Gebucht wird wenn es das Datum vom Startblatt noch nicht gibt, in die nächtste freie Zeile nachdem letzten eingetragenen Datum. Was noch schön wäre wenn der betrag gebucht ist das im Startblatt Spalte AG dann in der betreffenden Zeile ein x eingetragen wird.
Testet mal mit der angehängten Datei. Bitte nur diese nehmen da dort alle Änderungen drin sind!
Ob die TB5 + TB6 gebraucht werden oder ob man dies auch in ListBox1 anzeigen kann, ist euch überlassen! Ihr habt freie Hand. Ich hoffe wie immer das es einigermasen vertändlich geschrieben ist. Danke schon mal im vorraus!
Ich glaube da hast du was falsch verstanden! Wenn Du den Bereich AC16:AF20 im Startblatt meinst, da soll doch gar nichts gemacht werden. Es soll doch der Betrag aus Startblatt AF16:AF20 ausgelesen werden. Warum die Formeln überschreiben? Zeig mir doch bitte die Text zeile wo Ich dies geschrieben habe. Ich denke das ich mich wieder mal falsch ausgedrückt habe!