Clever-Excel-Forum

Normale Version: Tabelle mit VBA-Code automatisch füllen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2
Ein freundliches HALLO an alle da draußen, ich benötige mal eben eure Hilfe.
Ich hoffe es ist nur ein kurzes „ mal eben“ Wink
Denn ich als Laie verzweifle daran.
Im Anhang findet ihr eine kleine Tabelle, in der ich täglich Produktionsdaten (Register „Taktabweichung“) erfassen möchte.
Aufgrund der eingetragenen Werte, von den Kollegen in der Produktionsstätte, werden bestimmte Produktionsdaten ( wie Linienverfügbarkeit, Taktzeit oder Zeitüberschreitungen ) berechnet.
Diese Tabelle wird am Ende eines Tages „geleert“ und am nächsten Tag erneut „gefüllt“.
Beim Schreiben dieser Zeilen fällt mir ein, es gibt doch bestimmt ein Makro, das dieses auf Knopfdruck, automatisch macht, oder? Wink
Aber zurück zu meiner eigentlichen Fragestellung.
Damit diese Daten nicht verloren gehen, möchte ich sie sichern und zwar im Register „tägl Erfassung Taktabweichungen“. Hierfür suche ich einen entsprechenden VBA-Code, damit am Ende der Nachtschicht, bevor die Tabellen „geleert“ werden, die Daten in „tägl Erfassung Taktabweichungen“ gesichert werden.
Da ich in VBA nicht wirklich fit bin, hoffe ich hier auf eure Mithilfe. Ich würde vielleicht noch hinkriegen, wie ich das Ende der zu füllenden Tabelle finde, aber dann hört es auch schon auf Undecided.
Habt ihr eine Lösung für mich, wie ich die Daten auf Knopfdruck (vielleicht sogar automatisch, damit es von dem Bediener nicht vergessen werden kann) archivieren kann?
Zur Erläuterung: Es gibt noch das Registerblatt „Info“. Hier wird gespeichert, wer die Zeitdaten ggf. manipuliert hat (so was soll es geben Wink ). Aber es zuerst mit Sperren nach dem ersten Füllen der Zelle versucht. Aber was ist wenn der Bediener sich vertippt hat, dann kann er nicht mehr korrigieren, daher die Variante die Änderungen zu dokumentieren

Im Voraus herzlichen DANK
Frank S.
Hi,

(01.12.2015, 15:49)NoFear070 schrieb: [ -> ]Diese Tabelle wird am Ende eines Tages „geleert“ und am nächsten Tag erneut „gefüllt“.
Beim Schreiben dieser Zeilen fällt mir ein, es gibt doch bestimmt ein Makro, das dieses auf Knopfdruck, automatisch macht, oder? Wink

dazu den Makro-Rekorder starten, die Aktion "leeren" ausführen, Rekorder beenden und dann den Code hier posten. Dann können wir ihn gemeinsam verkürzen und verallgemeinern.
(02.12.2015, 08:15)Rabe schrieb: [ -> ]Hi,


dazu den Makro-Rekorder starten, die Aktion "leeren" ausführen, Rekorder beenden und dann den Code hier posten. Dann können wir ihn gemeinsam verkürzen und verallgemeinern.


Hallo Ralf,
leider war ich heute, beruflich, so eingespannt das ich leider nicht an derTabelle weiterarbeiten konnte.
Werde das aber morgen früh sofort nachholen.

Grüße
Frank
Dazu hat MS 'templates' erfunden.
Jedes Mal das du eine neue Datei machst ist das eine leere Datei, basiert auf dem Template.
Dann kannst du die neue Datei irgendwo speichern. 'Leer' machen ist dann überflüssig/sinnlos.
(02.12.2015, 21:15)snb schrieb: [ -> ]Dazu hat MS 'templates' erfunden.
Jedes Mal das du eine neue Datei machst ist das eine leere Datei, basiert auf dem Template.
Dann kannst du die neue Datei irgendwo speichern. 'Leer' machen ist dann überflüssig/sinnlos.


Hallo zusammen,
ich habe das Makro " TabellenLoeschen" mal eingefügt.
Aber das mit dem "Leeren" der Tabelle ist ja eigentlich nebensächlich, mir geht es ja eigentlich darum ( wie schon oben beschrieben )


.....Damit diese Daten nicht verloren gehen, möchte ich sie sichern und zwar im Register „tägl Erfassung Taktabweichungen“. Hierfür suche ich einen entsprechenden VBA-Code, damit am Ende der Nachtschicht, bevor die Tabellen „geleert“ werden, die Daten in „tägl Erfassung Taktabweichungen“ gesichert werden.
Da ich in VBA nicht wirklich fit bin, hoffe ich hier auf eure Mithilfe. Ich würde vielleicht noch hinkriegen, wie ich das Ende der zu füllenden Tabelle finde, aber dann hört es auch schon auf

In de Hoffnung das jemand eine Lösung hat,
Frank
Hi Frank,

(03.12.2015, 11:07)NoFear070 schrieb: [ -> ]Hierfür suche ich einen entsprechenden VBA-Code, damit am Ende der Nachtschicht, bevor die Tabellen „geleert“ werden, die Daten in „tägl Erfassung Taktabweichungen“ gesichert werden.
[...]
In de Hoffnung das jemand eine Lösung hat,

eine "Lösung haben" tun wir nicht. ;)

Aber auch bei diesem Vorgang gilt sinngemäß das, was ich gestern 8:15 h geschrieben habe:
Zitat:dazu den Makro-Rekorder starten, die Aktion "kopieren" ausführen, Rekorder beenden und dann den Code hier posten. Dann können wir ihn gemeinsam verkürzen und verallgemeinern.
(03.12.2015, 13:51)Rabe schrieb: [ -> ]Hi Frank,


eine "Lösung haben" tun wir nicht. ;)

Aber auch bei diesem Vorgang gilt sinngemäß das, was ich gestern 8:15 h geschrieben habe:

Hallo Ralf,
natürlich soll keiner eine Lösung für mich haben tun ;)
Da hast du völlig Recht! Schließlich bin ich ja auch hier um was zu lernen und nicht nur "abzuschreiben" - entschuldigung für meine Wortwahl.

So, ich habe jetzt mal das Makro "DatenUebertragen" eingefügt - aber erstmal nur für die Frühschicht
für mich jetzt, fürs Verständnis; ich müsste das ja jetzt mich Spätschicht und Nachtschicht auch machen, dann die DAten vom gesamten Tag anfügen und dann müsste das Makro in die erste Spalte der nächste leere Zeile springen, oder?
Also müsste ich bei RANGE nicht mit absoluten Adressen arbeiten , z.B. B8, sondern für 8 ( 9, 10, 11 und jede weitere Zeile) mit einer Variablen, oder ?

Grüße
Frank
Hallo Frank,
ich antworte mal mehrteilig - hab gleich Abendbrot Smile Wir können optimieren - das ist jetzt die "Lehrstunde", Excel kann das nicht alleine Sad
Hier mal Dein erster code:
Code:
Sub Tabellenloeschen()
'
' Tabellenloeschen Makro
'
' Tastenkombination: Strg+l
'
   Range("C17:I46").Select
   ActiveWindow.SmallScroll Down:=35
   Range("C17:I46,C58:I87").Select
   Range("C58").Activate
   ActiveWindow.SmallScroll Down:=33
   Range("C17:I46,C58:I87,C94:I123").Select
   Range("C94").Activate
   Selection.ClearContents
   ActiveWindow.SmallScroll Down:=-75
   Range("C17").Select
End Sub

Wie man sieht, hat sich Excel doch so einiges gemerkt, was Du so vor dem Löschen gemacht hast.
Da ist auch einiges, was später zum Löschen gar nicht nötig ist, das kürzen wir dann ein.

1. Du musstest bei der Aktion mehrmals scrollen. Das brauchen wir später nicht.
2. Du musstest die verschiedenen Bereich anklicken. Das brauchen wir dann auch nicht.
3. Man kann eine Aktion direkt in einem Bereich machen.

Code:
Sub Tabellenloeschen()
'Tabellenloeschen Makro
' Tastenkombination: Strg+l
   Range("C17:I46,C58:I87,C94:I123").ClearContents
   Range("C17").Select
End Sub

Nachher dann das Übertragen.
Hallo Frank,

hier nun der zweite Teil. Bei der Datensicherung solltest Du erst einmal überlegen, ob Du die 3 Schicht-Bereiche nicht nebeneinander schreibst. Es ist auf jeden Fall etwas einfacher, als immer wieder 3 übereinander stehende  Bereiche zu vergrößern und verschieben.

Das Makro ist ja beim Aufzeichnen recht lang geworden. Neben den Tips aus dem vorigen Beitrag lässt sich mit etwas Programmiertechnik Weiteres im code optimieren.

Hier verwende ich z.B. With und End With, das spart mir das ständige Wiederholen des Blattnamens.
Weiterhin nutze ich hier die Möglichkeit, dass ich im VBA nicht unbedingt die Blätter wechseln muss, u etwas zu kopieren oder hier einzufügen.

Ich habe diesmal nur den Anfang gemacht, die "..." kannst Du dann durch die einzelnen Bereiche nach dem Strickmuster erweitern.

Du siehst auch, dass ich eigentlich zu jeder codezeile einen Kommentar schreibe. Das muss vielleicht nicht sein, ist aber oft sehr hilfreich. Wenn dort steht 'Datum kopieren weiß man immer gleich, was da passiert. Du kannst nun z.B. auch schnell prüfen, ob die  'Summe Taktzeitueberschreitungen auch wirklich in die Spalte C gesichert werden soll ... Fehlt der Kommentar, musst Du später erst mal analysieren, was steht denn in D48 usw.

Code:
Sub DatenUebertragen()
' DatenUebertragen Makro
' Tastenkombination: Strg+d
' Variablendeklarationen
' Long
Dim lRow As Long
   'Hinweis: Bei Makrostart muss Tabelle Taktabweichung aktiv sein!
   'Mit dem Sicherungsblatt ...
   With Sheets("tägl Erfassung Taktabweichungen")
     'erste freie zelle anhand Spalte B ermitteln
     lRow = .Cells(Rows.Count, 2).End(xlUp).Row + 1
     'Datum kopieren
     Range("C11:D11").Copy
     'Datum in Spalte B = 2 einfuegen
     .Cells(lRow, 2).PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     'Summe Taktzeitueberschreitungen kopieren
     Range("D48").Copy
     'Istsueckzahl in Spalte C = 3 einfuegen
     .Cells(lRow, 3).PasteSpecial Paste:=xlPasteValues, _
        Operation:=xlNone, SkipBlanks:=False, Transpose:=False
   '...
   'Ende Mit dem Sicherungsblatt ...
   End With
End Sub

Du könntest, wenn Du die Schichtdaten nebeneinander schreibst, das Makro einfach 2x kopieren, umbenennen und die Bereiche anpassen.
Geht mit Schleifen und Arrays und was es noch so gibt auch zu vereinfachen, aber ich denke, für den Anfang wäre das auch eine Variante.

Das Verschieben rufst Du im anderen Makro vor dem löschen auf. Da reicht einfach nur der Makroname, z.B..
Code:
Sub Tabellenloeschen()
' Tabellenloeschen Makro
' Tastenkombination: Strg+l
 DatenUebertragen1
 DatenUebertragen2
 DatenUebertragen3
  Range("C17:I46,C58:I87,C94:I123").ClearContents
  Range("C17").Select
End Sub
Hallo Andre,
danke für deine ausführliche Hilfe!

Ich habe deine Antwort gerade nur kurz überfolgen, da ich heute morgen verschiedene Termine habe und erst nach dem Mittag mich damit beschäftigen kann.
Nur ein kurze Frage, was meinst du mit " .. Bei der Datensicherung solltest Du erst einmal überlegen, ob Du die 3 Schicht-Bereiche nicht nebeneinander schreibst. Es ist auf jeden Fall etwas einfacher, als immer wieder 3 übereinander stehende Bereiche zu vergrößern und verschieben. " ?

Meinst du damit, das die Tabellen evtl. nicht immer komplett gefüllt werden, oder ich Zeilen rausnehme oder einfüge ?
Denn prinzipiell ist das für mich egal ob nebeneinander oder untereinander -glaube ich Wink .
Die simple ERfassung, die wir zur Zeit hier im Einsatz haben, ist halt 3 einfache Tabellen die untereinanderstehen, ohne irgendwelche Berechnungen oder sonstige Aktivitäten.
Viel Grüße
und einen guten Start in die Woche,
Frank
Seiten: 1 2