Das Clever-Excel-Forum.de - Treffen
... 14.-16. September 2018 im Allgäu ...

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: 17)
to 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".
?mage
Gruß Günter
aus der Messe-, Buch-, Universitäts- und Autostadt Leipzig
to 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
to 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'
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to 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
to 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 
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
[-] Folgende(r) 1 Benutzer sagt Danke an Rabe für diesen Beitrag:
  • Travis5002
to 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: 13)
to 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.
?mage
Gruß Günter
aus der Messe-, Buch-, Universitäts- und Autostadt Leipzig
to 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.
Gruß Ralf

?mage

Die deutsche Rechtschreibung ist Freeware, d.h. du kannst sie kostenlos nutzen.
Allerdings ist sie nicht Open Source, deswegen darfst du sie nicht verändern oder in veränderter Form veröffentlichen.
to 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.
?mage
Gruß Günter
aus der Messe-, Buch-, Universitäts- und Autostadt Leipzig
to top


Gehe zu:


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