19.03.2015, 17:13 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2015, 17:16 von Travis5002.)
EditHallo Excel Freunde,
ich hätte da gerne ein Problem
Wie der Betreff schon sagt, es geht darum dass Werte in eine bestimmte Zelle, und zwar die nächste Freie übertragen werden. In der Beispieldatei befinden sich in Userform1 Vorrichtungen 1-5, auswählbar durch Checkboxen. Daneben befinden sich Comboboxen, über die der User die Anzahl bestimmt.
Soviel zum Aufbau.
=> Ziel der ganzen Aufgabe ist es, dass der User eine Auswahl an Vorrichtungen mit beliebiger Stückzahl auswählt und diese dann automatisch fortlaufend A2-A... bzw. B2-B... in die nächste freie Zeile übertragen werden. Der User soll bspw. sagen können er will Vorrichtung1, Vorrichtung3 und Vorrichtung 5, das soll dann untereinander gelistet werden in Tabellenblatt "Kalkulation" In der Originaldatei befinden sich über 100 verschiedene Vorrichtungen.
Da ich leider kein Informatikspezialist bin, komme ich auf keinen grünen Zweig mit der Sprache.
Zitat:Private Sub CheckBox1_Click() If CheckBox1 = True Then 'Wenn in Checkbox1 das Häckchen gesetzt ist' Range Sheets("Kalkulation").Cells(RowsCount, "A").End(xlUp).Row 1 Value= Checkbox1.Caption 'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein' End If End Sub
Da kommt ein Syntaxfehler, erkennst du wo dieser liegt?
19.03.2015, 20:12 (Dieser Beitrag wurde zuletzt bearbeitet: 19.03.2015, 20:24 von Rabe.
Bearbeitungsgrund: Formel erweitert
)
Hi,
(19.03.2015, 18:20)Travis5002 schrieb:
Code:
Range Sheets("Kalkulation").Cells(RowsCount, "A").End(xlUp).Row 1 Value= Checkbox1.Caption 'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
Da kommt ein Syntaxfehler, erkennst du wo dieser liegt?
Ist das eine Fangfrage? Denn so hat Günter die Formel nicht geschrieben!
Da fehlt auf jeden Fall ein + zwischen Row und 1, sowie ein . nach der 1
PS: und das ".Value" könnte man mW auch weglassen.
[edit] Ne, das stimmt komplett nicht, Range erwartet immer innerhalb einer Klammer eine Spalten- und Zeilenangabe. also Range("SpalteZeile")
Cells erwartet auch eine Klammer und darin Zeile,Spalte also Cells(Zeile,Spalte)
Das "Sheets("Kalkulation").Cells(RowsCount, "A").End(xlUp).Row + 1" ist die Zeile, wo ist die Spalte?
versuche es mal so:
Code:
Range Sheets("Kalkulation").Cells(RowsCount, "A").End(xlUp).Row + 1.Value= Checkbox1.Caption 'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
Code:
Cells(Sheets("Kalkulation").Cells(RowsCount, "A").End(xlUp).Row + 1,"A").Value = Checkbox1.Caption 'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
oder
Code:
Range("A" & Sheets("Kalkulation").Cells(RowsCount, "A").End(xlUp).Row + 1).Value = Checkbox1.Caption 'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein'
20.03.2015, 00:33 (Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2015, 00:47 von Rabe.)
Hi,
(19.03.2015, 21:28)Travis5002 schrieb: Bei mir funktioniert dein Code noch nicht. Hast du den mal getestet in der Beispieldatei? Bin ich mit meinem
Code:
If Checkbox1 = true then "Code einfügen"
überhaupt auf dem richtigen Weg?
ne, noch nicht probiert. Ich habe ja nur versucht, Deinen Code zu korrigieren und lasse den CaptionWert in die erste leere Zeile in Spalte A eintragen.
Was heißt, "funktioniert noch nicht"? Kommt eine Fehlermeldung? Welche? Kommt immer noch Syntaxerror?
So, ich habe mir die Datei angeschaut.
Mit diesem Code geht es:
PHP-Code:
Private Sub CheckBox1_Click()
Dim loLetzte As Long If CheckBox1 = True Then 'Wenn in Checkbox1 das Häckchen gesetzt ist' loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row + 1 Range("A" & loLetzte).Value = CheckBox1.Caption 'Gehe zur nächsten freien Zelle und schreibe den Namen der Checkbox rein' End If End Sub
Anstelle der 1 bei RowsCount könntest Du auch "A" nehmen:
PHP-Code:
P loLetzte = Sheets("Kalkulation").Cells(Rows.Count, "A").End(xlUp).Row + 1
Wenn Du die Codeschnipsel vergleichst, siehst Du, es kommt auf jeden Punkt und jedes Komma an!
20.03.2015, 11:00 (Dieser Beitrag wurde zuletzt bearbeitet: 20.03.2015, 11:59 von Travis5002.
Bearbeitungsgrund: Edit: Habe zur besseren Verständlichkeit die Bsp. Datei erneut hochgeladen.
)
Hallo Rabe,
danke für die schnelle Antwort. Funktioniert super! Habe das System für alle 5 Checkboxen übertragen.
Habe den Code recht pragmatisch abgeändert, damit die Zelle leer wird, wenn man das Häkchen wieder rausnimmt.
Code:
Else
If CheckBox1 = False Then 'Wenn in Checkbox1 das Häckchen gelöscht wird oder keins vorhanden ist' loLetzte = Sheets("Kalkulation").Cells(Rows.Count, 1).End(xlUp).Row Range("A" & loLetzte).Value = "" 'Lösche den Wert aus ebendieser Zelle' End If End If End Sub
Funktioniert!
Das Tool, das ich gerade erstelle soll aber intern der Firma für sehr viele Ma. zugänglich sein, d.h. ich würde es gerne "Idiotensicher" machen, soll heißen, dass der ungeübte User auf keinen Fall eine Fehlkalkulation machen kann.
=> User wählt aus: Vorrichtung 1 Vorrichtung 3 Vorrichtung 4
Danach entscheidet er sich dass er Vorrichtung 1 doch nicht braucht und nimmt das Häkchen wieder raus. Gelöscht wird jedoch nicht Vorrichtung 1 sondern Vorrichtung 4, da diese in der letzten steht. Gibt es eine Möglichkeit nach dem "else" Befehl nicht nach der letzten beschriebenen Zelle zu suchen, sondern nach dem Value der Checkbox? Dass die Reihenfolge in der der user also seine Auswahl tätigt und wieder abwählt also egal wird.
Hoffe ich konnte mich verständlich ausdrücken :05:
ich habe leider jetzt nicht die Zeit, den Code entsprechend einzubauen, aber da du immer bei einem Vorgang 3 Zeilen in deiner Kalkulation hinzufügst, musst du beginnend mit der letzten gefüllten Zeile auf den Zellinhalt und den Checkbox-Inhalt prüfen:
(20.03.2015, 12:45)Glausius schrieb: If CheckBox1 = "" then .......Row - 2 = "" If CheckBox2 = "" then .......Row - 1 = "" If Checkbox3 = "" then .......Row = ""
Ich denke, den Code kannst du selbst vervollständigen.
und was ist, wenn der User nur ein Checkbox anklickt und dann wieder abklickt? Dann wird eine ganz andere Zeile gelöscht. Das ist vermutlich ungeschickt.
dann muss man eben vor dem Löschen einiges abfragen!
Deinen Kommentar kann man noch erweitern: Was passiert, wenn der User nach dem Eintragen alle 3 Checkboxen wieder abwählt? Da steht die Frage, wann wird in die Kalkulation eingetragen?
Ansonsten muss vor dem einzelnen Löschen noch die Abfrage stehen:
If CheckBox1 = "" and CheckBox2 = "" and CheckBox3 = "" then Exit Sub
Hier ist die Kreativität des Programmierers gefragt, denn der weiß alle Eventualitäten.
Gruß Günter aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig