Excel: Tabelle per Button an andere Datenbank hinzufügen

killaVilla

Cadet 1st Year
Registriert
Okt. 2020
Beiträge
11
Hey :))

Ich häng fest.. send help pls :)

Habe ein Excel Blatt bei dem man täglich neue Daten eingibt mit mehreren Zeilen:
A1: Datum
A20: Störung
B20: Art
C20: Verursacher
D20: Ort
E20: Dauer

Also zb. an einem Tag gibt es mehrere Störungen und am nächsten vielleicht nur eine Störung.

Wenn man die Daten eingegeben hat, soll das ganze dann über einen Button in ein anderes Blatt übertragen werden und dann an die Bereits bestehende Datenbank/Tabelle angehängt werden.
Leider hab ich von VBA noch keine Ahnung und komme sonst auf keinen Grünen Zweig... excel2PNG.PNGexcel.PNG

Viele Grüße :-)
 
killaVilla schrieb:
Leider hab ich von VBA noch keine Ahnung
Dann ist jetzt die richtige Zeit, das zu ändern :) Das ist ja eine relativ simple Aufgabenstellung.

Du könntest dein Vorhaben einfach mal mit dem Makrorekorder aufzeichnen und dir dann den VBA-Code dazu angucken und ihn im Editor noch nach deinen Bedürfnissen anpassen.

Also:
  1. Makrorekorder starten
  2. Zellen markieren
  3. Zellen kopieren (oder ausschneiden)
  4. Zum anderen Tabellenblatt wechseln
  5. Kopierte Zellen einfügen
  6. Makrorekorder stoppen
 
  • Gefällt mir
Reaktionen: killaVilla und snaxilian
Missbrauchst du da tatsächlich Excel als Ticketsystem? Excel ist nicht die Lösung für jedes Problem, Excel ist das Problem weil es jeder als Lösung für alles ansieht auch wenn es dutzende bessere fertige Tools gibt!
 
Danke für die HIlfe. Als Makro hab ich es jetzt aufgezeichnet, dennoch verstehe ich es in VBA nicht, bzw was ich ändern muss damit es in der Datenbank/Tabelle angehängt wird..
 
Hey, ich glaube da kann ich etwas weiterhelfen.

Als erstes musst du die erste leere Zeile finden bzw. die letzte befüllte. Ich kürze deine Google suche mal ab...

t = Sheets("SLS_S_Neu").Cells(Rows.Count, 1).End(xlUp).Row + 1

Jetzt musst du nur noch die Werte von dem einen Tabellenblatt auf das andere übertragen, mit der Zeilenangabe ist die halbe Miete schon gemacht:

Sheets("SLS_S_Neu").Cells(t, 1) = Sheets("Eingabeblatt").Range("A1")
Sheets("SLS_S_Neu").Cells(t, 2) = Sheets("Eingabeblatt").Range("D20")

...usw. Bei Cells(x,y) gibt x die Zeile (die haben wir ja als Variable ermittelt) an und y die Spalte. Range sollte klar sein.

Natürlich kann man das auch anders lösen (array/loop o.ä), aber ich denke für diesen Fall reicht das. Da kein Sicherheitsmechanismus drin ist würde ein mehrfacher Knopfdruck die Werte immer weiter hinzufügen. Aus diesem Grund würde ich zumindest eine Messagebox einfügen, welche die Übernahme der Daten bestätigt.

MsgBox ("Daten übernommen")

Oder die Daten nach der Übernahme löschen mit Sheets("Eingabeblatt").Range("A1").ClearContents

Hoffe das hilft dir :) Sich ein bisschen in VBA einzulesen hilft immer, vor allem wenn man viel mit Excel arbeitet :)
Mfg
 
  • Gefällt mir
Reaktionen: killaVilla und cruse
Danke dir @elnino460, du hast mir wirklich sehr sehr viel weitergeholfen!!!
:)
Mit einer Zeile funktioniert es einwandfrei,

wenn ich aber eine Zweite hinzufügen will mit:

Sheets("SL_S_NEU").Cells(t,1) = Sheets("Eingabeblatt").Range("A21")

ebenso mit

Sheets("SL_S_NEU").Cells ( t,1) = Sheets("Eingabeblatt").Range("A20:A25")

funktioniert es nicht mehr.
Hast du hier noch einen Tipp für mich, wie es funktionieren könnte?


LG
Ergänzung ()

Habe eine Lösung gefunden!
Neue Variable definieren und dasselbe Spiel nochmal :)
 
Zuletzt bearbeitet:
Mist, jetzt hatte ich den Text schon geschrieben und dann erst deinen Edit gesehen :) Ich poste das trotzdem mal hier, vielleicht hilft es dir für die Zukunft weiter oder anderen mit ähnlichen Anliegen.

Das ist etwas komplizierter weil für die Eingabe die Cell(Rows.Count) Funktion nicht geht. Da gibt es jetzt mehrere Vorgehensweisen:

1) Einfach die nächsten Werte direkt mitnehmen mit dem gleichen Prozedere:
Code:
Sheets("SLS_S_Neu").Cells(t+1, 2) = Sheets("Eingabeblatt").Range("D21")
Sheets("SLS_S_Neu").Cells(t+2 2) = Sheets("Eingabeblatt").Range("D22")
usw..
Dürfte auch funktionieren, da die bei einem Eintrag die zweite Zeile im Eingabeblatt ja leer ist und dann werden leere Zeilen übertragen. Allerdings wäre mir das schon zu viel Code-gewurstel, vor allem wenn es noch mehr Einträge sein können.

2) Das Ganze als Schleife aufbauen.

Dafür brauchen wir die Anzahl der Einträge und das dann als Variable nehmen. Geht entweder mit ANZAHL2(A20:A50) in irgendeiner Zelle und dann über Range holen oder mit dieser Funktion:
Code:
 s = WorksheetFunction.CountA(Sheets("Eingabeblatt").Range("A20:A50"))

Damit hat man die Anzahl der Einträge im Eingabeblatt. Hier würde ich jetzt eine Schleife vorschlagen:

Code:
t = Sheets("SLS_S_Neu").Cells(Rows.Count, 1).End(xlUp).Row + 1               ' Erste leere Zeile in SLS_S_Neu
s = WorksheetFunction.CountA(Sheets("Eingabeblatt").Range("A20:A50"))        ' Anzahl der Einträge im Eingabeblatt

For i = 0 To s - 1
    Sheets("SLS_S_Neu").Cells(t + i, 1) = Sheets("Eingabeblatt").Cells(1, 1)
    Sheets("SLS_S_Neu").Cells(t + i, 2) = Sheets("Eingabeblatt").Cells(20 + i, 4)
    Sheets("SLS_S_Neu").Cells(t + i, 3) = Sheets("Eingabeblatt").Cells(20 + i, 1)
    Sheets("SLS_S_Neu").Cells(t + i, 4) = Sheets("Eingabeblatt").Cells(20 + i, 2)
    Sheets("SLS_S_Neu").Cells(t + i, 5) = Sheets("Eingabeblatt").Cells(20 + i, 3)
    Sheets("SLS_S_Neu").Cells(t + i, 6) = Sheets("Eingabeblatt").Cells(20 + i, 5)
Next

Ist eigentlich relativ simpel. Das i steht einfach für die Anzahl der Einträge im Eingabeblatt. Ob man jetzt i = 0 To s-1 oder i = 1 To s nimmt ist egal. Im SLS_S_Neu wird also die erste leere Zeile als Ziel definiert und die Quelle beginnt ab Zeile 20. Wenn das übertragen ist, dann wird die erste leere Zeile + 1 anvisiert und die QUelle ist Zeile 20 + 1. Das Ganze wird so oft wiederholt, wie es Einträge im Eingabeblatt gibt (Variable s). Die Zuordnung der Spalten habe ich hier manuell gemacht, könnte man noch als Array/Dictionary oder so aufbauen, aber da hatte ich jetzt keine Lust drauf :D
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: killaVilla
Zurück
Oben