Ein freundliches HALLO an alle da draußen, ich benötige mal eben eure Hilfe. Ich hoffe es ist nur ein kurzes „ mal eben“ 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? 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 . 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 ). 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
(01.12.2015, 16: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?
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.
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.
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, 22: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
03.12.2015, 14:51 (Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2015, 17:01 von Rabe.)
Hi Frank,
(03.12.2015, 12: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, 15:30 (Dieser Beitrag wurde zuletzt bearbeitet: 03.12.2015, 17:02 von Rabe.
Bearbeitungsgrund: einen überflüssigen Buchstaben bei meinem Text gelöscht.
)
(03.12.2015, 14: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 ?
04.12.2015, 19:33 (Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2015, 19:33 von schauan.)
Hallo Frank, ich antworte mal mehrteilig - hab gleich Abendbrot Wir können optimieren - das ist jetzt die "Lehrstunde", Excel kann das nicht alleine 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.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
04.12.2015, 20:53 (Dieser Beitrag wurde zuletzt bearbeitet: 04.12.2015, 20:54 von schauan.)
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
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
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 . 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