Excel vba Befehl für "Speichern" Button?

2 Antworten

Du kannst hierfür

ThisWorkbook.Worksheets(2).Cells(2,1)=Textbox1.Text

Verwenden.

Wenn du ThisWorkbook weg lässt, wird uns aktuell aktivierte Workbook geschrieben (Wenn mehrere offen sind). Alternativ kannst du dort auch ein bestimmtes Workbook angeben. Wenn du

ThisWorkbook.Worksheets(2)

weglässt, wird ins aktuell aktive Tabellenblatt geschrieben. Alternativ kannst du hier auch ein Worksheet abgeben. Der Cells-Befehl bekommt die Zeile und die Spalte Cells(2,1) entspricht also Range("A2"). Du könntest also auch

ThisWorkbook.Worksheets(2).Range("A2")=Textbox1.Text

verwenden.

Kommt der Wert nicht aus einer Textbox, sondern aus einer Combox, heißt es analog ComboBox1.Text.

Möchtest du zuerst die neue Zeile suchen, kannst du das z.B. folgendermaßen machen:

Ich gehe dabei davon aus, dass Spalte A immer gefüllt sein muss:

Dim Zeile As Long
Zeile = 1
Dim WS aus Worksheet 'Dadurch muss man das nicht jedes Mal ausschreiben - Alternativ könnte man einen With-Block machen, aber ich schreibe gerade am Handy und da ist Einrücken immer nur mit vielen Leertasten möglich
Set WS = ThisWorkbook.Worksheets(2)
'leere Zeile suchen
While WS.Cells(Zeile,1)<>""
     Zeile = Zeile + 1
Wend
'Werte in die Zeile übernehmen
WS.Cells(Zeile,1) = Combox1.Text
WS.Cells(Zeile,2) = Textbox1.Text
'Statt Cells kann man auch Range nehmen
WS.Range("C" & Zeile) = TextBox2.Text 'ich bin mir nicht sicher, ob man das vorher in eine Zahl umwandeln muss. In dem Fall wäre die Zeile
WS.Range("C" & Zeile) = Val(Replace(Textbox2.Text,",","."))'Durch das Replace kann man sowohl Komma als auch Punkt als Dezimaltrennzeichen verwenden. Ohne Replace geht es nur mit Punkt, sonst wird die Zahl an dieser Stelle abgeschnitten. Hinweis: das Prozentzeichen verursacht bei Val einen Laufzeitfehler, kann aber mit Replace % durch irgendwas anderes ersetzt werden. Bei allen anderen Zeichen (Z.B. Buchstaben Bericht betrachtet die Funktion nur die Zahl davor.
'...
Angstkaninchen 
Fragesteller
 12.12.2019, 12:16

Okay, hat soweit alles geklappt.
Jetzt fehlt nur noch eins ... bin leider kein Experte, daher bin ich mir nicht sicher, ob der untere Teil deiner Antwort sich darauf bezieht, aber wenn ich jetzt einen neuen Eintrag speichern will, überschreibt er aktuell den Inhalt, weil er nur in eine Zeile schreibt ... wie kann ich sagen, dass er bitte in die nächste freie Zeile schreiben soll? :)

1
holgerholg  12.12.2019, 12:27
@Angstkaninchen

Ja, dafür ist der untere Teil da.

Zuerst definiert dieser eine Variable Zeile. Dann sucht er die erste freie Zeile (im Beispiel in Spalte A). Dazu erhöht er die Variable solange um 1 wie das erste Feld der ersten Zeile nicht leer ist.

Dim Zeile As Long
Zeile = 1
Dim WS aus Worksheet 'Dadurch muss man das nicht jedes Mal ausschreiben - Alternativ könnte man einen With-Block machen, aber ich schreibe gerade am Handy und da ist Einrücken immer nur mit vielen Leertasten möglich
Set WS = ThisWorkbook.Worksheets(2)
'leere Zeile suchen
While WS.Cells(Zeile,1)<>""
     Zeile = Zeile + 1
Wend

Sobald er eine Zeile, in der die erste Zelle leer ist, findet geht er zum Eintragen über:

'Werte in die Zeile übernehmen
WS.Cells(Zeile,1) = Combox1.Text
WS.Cells(Zeile,2) = Textbox1.Text
'Statt Cells kann man auch Range nehmen
WS.Range("C" & Zeile) = TextBox2.Text 'ich bin mir nicht sicher, ob man das vorher in eine Zahl umwandeln muss. In dem Fall wäre die Zeile
WS.Range("C" & Zeile) = Val(Replace(Textbox2.Text,",","."))'Durch das Replace kann man sowohl Komma als auch Punkt als Dezimaltrennzeichen verwenden. Ohne Replace geht es nur mit Punkt, sonst wird die Zahl an dieser Stelle abgeschnitten. Hinweis: das Prozentzeichen verursacht bei Val einen Laufzeitfehler, kann aber mit Replace % durch irgendwas anderes ersetzt werden. Bei allen anderen Zeichen (Z.B. Buchstaben Bericht betrachtet die Funktion nur die Zahl davor.

Hier kann man

.Cells(Zeile, 1) / .Cells(Zeile, 2)...

Oder

.Range("A" & Zeile) / .Range("B" & Zeile) ...

Verwenden

Du könntest auch den Teil einfach so wie er das steht Kopieren, dann sollte er jeweils die ersten drei Spalten einer neuen Zeile füllen und den Rest musst du halt noch ergänzen.

2
Angstkaninchen 
Fragesteller
 17.12.2019, 12:57
@holgerholg

Das

Dim WS aus Worksheet

in der 3. Zeile wird bei mir immer als Fehler markiert und wenn ich es lösche wird mir gesagt "Objekt fehlt" ... aber ich glaube ich stehe auch gerade auf dem Schlauch ^^

0
Angstkaninchen 
Fragesteller
 14.01.2020, 12:49
@holgerholg

Hallo :)

habe jetzt gefühlt eine Ewigkeit damit verbracht, das hinzubekommen aber es scheitert, egal wie, am Ende immer daran, dass jede Eingabe immer die erste Zeile überschreibt und nicht in die darunterliegende Zeile schreibt.
Hast du noch irgendeine Idee, warum das evtl nicht funktioniert?

Mit freundlichen Grüßen :)

0

Schau mal, ob die Textfelder eine text-Eigenschaft haben. Manchmal könnte diese auch value heißen.

Über diese Eigenschaft greifst du den Inhalt ab und schreibst ihn in die Zelle.

Beispiel:

Worksheets(1).Range("A1").Value = Textfeld1.text

Bei der Combobox schaust du einmal, ob es eine Eigenschaft "selectedText", "Text", "Value" oder "selectedValue" oder so gibt.

Woher ich das weiß:Berufserfahrung – Programmierer