Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Wert in nächste freie Zeile schreiben VBA
#1
EditHallo Excel Freunde,

ich hätte da gerne ein Problem Undecided

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. Huh 

Hat Jemand einen Vorschlag?

Vielen Dank schon mal im Voraus!


Schönen Abend noch& LG

Travis5002


Angehängte Dateien
.xlsm   Beispieldatei.xlsm (Größe: 20,36 KB / Downloads: 23)
Antworten Top
#2
Hallo Travis5002,

mit der Codezeile

Zeile = Sheets("Kalkulation").Cells(RowsCount, "A").End(xlUp).Row + 1

ermittelst du die erste freie Zeilennummer in dem Tabellenblatt "Kalkulation".
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#3
Hallo Glausius,

vielen Dank für die schnelle Antwort.

Meine Code sieht nun aus wie folgt:
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?

MfG Travis5002
Antworten Top
#4
Hi,

(19.03.2015, 17: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'
Antworten Top
#5
Hallo Rabe,

Zitat:Ist das eine Fangfrage? Denn so hat Günter die Formel nicht geschrieben!
Oh, da muss ich mich wohl beim kopieren vertan haben. Sorry.

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?

Dankend, sorry für die Umstände Sleepy


Travis5002
Antworten Top
#6
Hi,

(19.03.2015, 20: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.Count1).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 

Wenn Du die Codeschnipsel vergleichst, siehst Du, es kommt auf jeden Punkt und jedes Komma an!

Günters Code:
PHP-Code:
Sheets("Kalkulation").Cells(RowsCount"A").End(xlUp).Row 

Dein Code:
PHP-Code:
Sheets("Kalkulation").Cells(RowsCount"A").End(xlUp).Row 1 

Mein Code:
PHP-Code:
Sheets("Kalkulation").Cells(Rows.Count"A").End(xlUp).Row 
[-] Folgende(r) 1 Nutzer sagt Danke an Rabe für diesen Beitrag:
  • Travis5002
Antworten Top
#7
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:

Vielen Dank schon mal im Voraus

LG Travis5002


Angehängte Dateien
.xlsm   Beispieldatei.xlsm (Größe: 27,73 KB / Downloads: 24)
Antworten Top
#8
Hallo Travis5002,

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:
 
Row = Checkbox3
Row - 1 = Checkbox2
Row - 2 = Checkbox1

also

If CheckBox1 = "" then .......Row - 2 = ""
If CheckBox2 = "" then .......Row - 1 = ""
If Checkbox3 = "" then .......Row = ""

Ich denke, den Code kannst du selbst vervollständigen.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top
#9
Hi,

(20.03.2015, 11: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.
Antworten Top
#10
Hallo Ralf,

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.
[Bild: attachment-190.gif]
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Antworten Top


Gehe zu:


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