Excel vba Befehl für "Speichern" Button?
Hallo :)
ich arbeite gerade an einer Excel Tabelle, bei der ich etwas in das Formular eingebe und der Inhalt dann via Speichern-Button in Tabellenblatt 2 automatisch in eine Tabelle eingetragen wird.
Nun ist alles fertig, nur habe ich es bis jetzt nicht hinbekommen, dem Speichern-Button die benötigten Befehle zuzuordnen, den Inhalt der TextBox und ComboBox in die Tabelle auf Tabellenblatt 2 einzutragen.
Ich benutze bewusst Excel und nicht Access.
Kann mir jemand helfen?
Mit freundlichen Grüßen :-)
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.
'...
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.
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 ^^
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 :)
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.
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? :)