Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1624to1628
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

C-Button -> Druck, Datei speichern + zurücksetzen

C-Button -> Druck, Datei speichern + zurücksetzen
06.06.2018 14:37:15
Chris
Hallo Forum,
um sehr viel Zeit sparen zu können benötige ich euch.
Gibt es die Möglichkeit einen Code zu erstellen, welcher nachfolgendes – eingefügt in einen CommandButton – sozusagen per Knopfdruck erledigt?
Tabelle A soll beim Klicken auf den Button gedruckt werden, dabei soll parallel eine Datei unter Pfad X erstellt werden mit Benennung der Zelle B2.
Des Weiteren soll anschließend die Tabelle A auf den Ursprungszustand zurückgesetzt werden.

Bzgl. des Ursprungszustands
ist es erforderlich den tatsächlich Zustand wiederherzustellen.
Ich habe es bereits mit einem Code versucht, welcher den Inhalt in Zelle X, Y & Z löscht, da ggf. aber auch Formeln überschrieben werden, welche dann durch reines Löschen des Inhalts in den entsprechenden Zellen nicht wieder hergestellt werden, ist das keine Option.
Es ist natürlich kein Problem eine zweite Tabelle (Tabelle B) - Kopie vom Ursprungszustand Tabelle A - zu erstellen, worauf sich der Code dann beziehen kann.
D.h. der Code löscht dann nach dem Drucken und dem Speichern der Datei dieses Tabellenblatt A und kopiert Tabellenblatt B, mit Benennung X.
Das wäre jetzt meine Idee, aber ich kenne mich mit der Umsetzbarkeit leider überhaupt nicht aus. Ggf. gibt es auch einen besseren respektive einfacheren Weg.
Ich habe für mich festgestellt, dass „ClearContents“ nur passend ist, bei Zellen, die vorher keine Formel hinterlegt habe, welche dann möglicherweise aufgrund von bestimmten Faktoren überschrieben werden kann.
Ich bedanke mich im Voraus für eure Hilfe! 
Gruß,
Chris

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Warum Wiederherstellen?
06.06.2018 15:03:43
EtoPHG
Hallo
Anforderungen:
1. Tabelle A drucken
2. Datei erstellen unter Pfad X, Benennung aus B2
3. Tabelle A zurücksetzen (Wiederherstellen)
Frage zu:
2. Was für eine Datei soll erstellt werden? Was für einen Inhalt hat die Variable X? Was wird benannt aus B2? Was ist der Inhalt der Datei
3. Warum etwas in den tatsächliche Zustand zurücksetzen? Weder 1 noch 2 verändern den Inhalt der Tabelle A?
Anscheinend schwirrt bei Dir schon Code rum, weil du was von .ClearContents schreibst?
Wie sieht dieser Code aus?
Gruess Hansueli
AW: Warum Wiederherstellen?
06.06.2018 15:54:48
Chris
Hallo Hansueli,
danke für deinen Beitrag!
Zu deinen Fragen:
Es handelt sich um ein Lieferschein-Formular u.a. mit 2 voneinander abhängigen Dropdownlisten und sich darauf beziehenden Index-Formeln.
Diese wird gedruckt und soll anschließend ebenfalls unter der entsprechenden Referenz-Nr. (Inhalt B2) auf dem Server gespeichert werden - UNC-Pfad (X).
Wiederherstellen deshalb, weil bestimmte Felder wie bspw. Menge von Größe X manuell ausgefüllt werden und sich daraus selbstständig die Menge in Abhängigkeit des Artikels bzw. dessen Materialliste, welchen man im Dropdown anwählt, berechnet.
Da nach dem Drucken eine neue Eingabe erfolgt, muss alles wieder zurückgesetzt werden.
Einen Code habe ich durchs recherchieren gefunden, der eben nur bestimme bzw. zu überschreibende Zellen zurücksetzt.
Jetzt kann es aber mal sein, dass ein Wert, den eine Formel ausspuckt nicht korrekt ist. Dann wird dieser schnell überschrieben. Somit ist die Formel weg und kann dann auch durch "ClearContents“ nicht wiederhergestellt werden. Man müsste die Datei in diesem Fall jedes Mal neu öffnen, was ziemlich umständlich wäre - daher dieser "Wunsch".
Hoffe ich konnte der einen besseren Einblick verschaffen :-).
Gruß,
Chris
Anzeige
Formeln überschreiben ohne Formeln zu verlieren
06.06.2018 17:13:19
Daniel
Hi
generell würde ich in solchen Fällen als ersten Schritt das kopieren der noch leeren Vorlage in ein neues Blatt bzw Datei ausführen und dann mit dieser Kopie arbeiten.
Für einen neuen Lieferschein fertigt man dann einfach eine neue Kopie der Vorlage an, dann hat man diese Probleme nicht.
wenn du bei deiner Vorgehensweise bleiben willst und das Problem hast, dass es Felder gibt, in denen eine Formel steht, die aber überschrieben werden kann und dann beim Rücksetzen wieder die Formel erscheinen soll, dann kannst du das so relativ einfach realisieren:
1. jedes solcher Eingabefelder mit Vorbelegungsformel besteht aus zwei Zellen.
2. die linke Zelle enthält die Formel bzw den "Standardwert"
3. die rechte Zelle ist leer, bzw hier wird dann der Wert manuell eingetragen.
4. die Spaltenbreite der linken Zelle ziehst du jetzt auf den kleinstmöglichen Wert größer 0 (ein Pixel), die Zelle darf nicht ausgeblendet sein.
das hat dann zur folge, dass wenn die rechte Zelle leer ist, der Wert aus linken Zelle in die rechts daneben liegende Zelle weiter geschrieben wird und somit sichtbar ist
ist die rechte Zelle befüllt, wird natürlich ihr Wert angezeigt und der Wert der linken Zelle verschwindet, weil die Zelle eben sehr schmal ist.
sobald du die rechte Zelle leerst, erscheint wieder der Inhalt der linken Zelle.
Zu beachten ist, dass das Formelergebnis der linken Zelle ein Text sein muss und keine Zahl, da nur Texte leere Nachbarzellen überschreiben und Zahlen immer nur innerhalb der Zelle selbst angezeigt werden. Dh Zahlenergebnisse müssten dann mit TEXT eben unmgewandelt werden.
mit diesem Konstrukt kannst du also in deinem Formular überschreibbare Formeln verwenden, ohne das die Formeln verloren gehen.
Nach leeren der Eingabezelle wird wieder das Formelergebnis angezeigt und du kannst dein Formular einfach durch löschen aller Eingabezellen wieder zurücksetzen.
Gruß Daniel
Anzeige
C-Button -> Druck, Datei speichern + zurücksetzen.
07.06.2018 08:18:01
Chris
Morgen Daniel,
danke für deinen konstruktiven Beitrag!
Generell hast du vermutlich Recht, dass es einfacher wäre quasi die Änderungen in einer Kopie vorzunehmen und nicht, so wie ich es mir gedacht habe - sozusagen andersrum.
Der Punkt ist aber, dass ich alle genannten Punkte/Anforderungen mit einem "Klick" erledigen will. Würde ich zunächst so vorgehen, müsste ich 2 Aktionen durchführen, d.h. das Drucken und parallel speichern unter Pfad X würde zu dem Zeitpunkt keinen Sinn machen indem ich die Kopie erzeugt wird, da die manuelle Eingabe ins das Formular erst nach Erzeugen der Kopie vorgenommen wird.
Zu deiner Schilderung hinsichtlich einer Möglichkeit die Formeln beim Zurücksetzen erhalten zu können, werde ich mir noch Gedanken machen. Ich würde eine VBA-Lösung, die alles unter einem Hut bringt natürlich bevorzugen, ggf. kann ich mir das neu gewonnene Wissen dennoch zu Nutzen machen.
Danke nochmals dafür!
Gruß,
Chris
Anzeige
AW: C-Button -> Druck, Datei speichern + zurücksetzen.
07.06.2018 09:28:06
Daniel
Hi
Du kannst per VBA auch problemlos Formeln in eine Zelle schreiben.
Dh statt Range("A1").ClearContents zum löschen dann mit Range("A1").Formula = "=B1+C1" wieder die originalformel in die Zelle schreiben
Das musst du dann für jede Formel im Code entsprechend programmieren.
Gruß Daniel
AW: C-Button -> Druck, Datei speichern + RESET
07.06.2018 09:53:23
Chris
Hallo Daniel,
ah verstehe! Da ich von VBA leider gar keine Ahnung habe, wusste ich das auch nicht. Es ist aber leider ziemlich aufwändig, bei der Menge an Formeln. Da habe ich auch etwas bedenken, dass die Performance leidet.
Hältst du bzw. grundsätzlich jemand, meinen Gedanken mit einer Kopie des Ursprungszustands von Tabelle A, die sich permanent unberührt in der Arbeitsmappe befindet und auf diese per Code Bezug genommen werden kann, wenn man praktisch die originale Tabelle A zurücksetzen will, für nicht umsetzbar?
Falls dem so wäre, müsste ich weiterhin ausgewählte Zellen per "ClearContents" zurücksetzen und ggf. dann mit dem Vorschlag von Daniel gucken, wie ich weiterkomme.
Aber auch zurück zu meinen Hauptanliegen, bin leider noch nicht wirklich weiter gekommen :-(.
Sieht jemand einen Weg meine Anforderungen - nachfolgend - in einen CommandButton zu integrieren?
Tabelle A soll beim Klicken auf den CommandButton gedruckt werden, dabei soll parallel eine Datei unter Pfad X erstellt werden mit Benennung der Zelle B2.
Des Weiteren soll anschließend die Tabelle A auf den Ursprungszustand zurückgesetzt werden.

Gruß,
Chris
Anzeige
AW: C-Button -> Druck, Datei speichern + RESET
07.06.2018 10:29:05
Daniel
Hi
der Code für deinen Wunsch könnte so aussehen:
das Rücksetzen musst du entsprechend anpassen.
das Löschen von Eingabezellen kannst du in einem Schritt machen.
für das wiederherstellen der Formeln musst du wahrscheinlich jede Formel einzeln programmieren.
(es sei denn, mehrere Zellen bekommen die gleiche Formel, dh per Copy-Paste übertragbar)
Sub DruckenSpeichernRücksetzen()
With ThisWorkbook.Sheets("Tabelle A")
'--- Blatt drucken
.PrintOut
'--- Datei als Kopie speichern
.Copy
ActiveWorkbook.SaveCopyAs "C:\Pfad X\" & .Range("B2").Value
'--- Rücksetzen
.Range("A1,B1,C1").ClearContents
.Range("D1").Formula = "Was immer deine Formel hier sein soll"
.Range("F1").Formula = "Was immer deine Formel hier sein soll"
End With
End Sub
Eine Anleitung, wie du ein Makro einem Button bzw einer Schaltfläche zuweisen kannst, findest du hier:
http://www.online-excel.de/excel/grusel_vba.php?f=6
Gruß Daniel
Anzeige
AW: C-Button -> Druck, Datei speichern + RESET
07.06.2018 11:16:52
Chris
Hi Daniel,
super, danke für den Code!
Ich habe diesen gleich probiert und um Ihn testen zu können, den Bereich mit ".Formula" erst einmal weggelassen.
Leider spuckt Excel einen Laufzeitfehler 1004 aus, mit der Anmerkung, dass nicht auf die Datei 'MEIN PFAD' zugegriffen werden kann.
Der erste Befehl - das Drucken - wird ausgeführt.
Hier mein exakter Code:
Private Sub CommandButton1_Click()
With ThisWorkbook.Sheets("Formular")
'--- Blatt drucken
.PrintOut
'--- Datei als Kopie speichern
.Copy
ActiveWorkbook.SaveCopyAs "C:\Users\XXX\Desktop" & .Range("B2").Value
'--- Rücksetzen
.Range("B1,B2").ClearContents
End With
End Sub
Für mich klingt das so als würde Excel den Bereich mit dem Speichern unter Pfad X mit Benennung des Inhalts Zelle B2 so interpretieren, dass es eine Datei öffnen soll - was meinst du?
Eine Frage auch noch dazu: Ist es so vorgesehen, dass sich dann eine Kopie öffnet, diese gespeichert wird und anschließend wieder beendet wird? Oder muss man die Kopie dann manuell schließen?
Sollte sich erzeugte die Kopie nach dem Speichern unter Pfad X Kopie direkt wieder schließen, wäre das der i-Punkt :-).
Gruß,
Chris
Anzeige
AW: C-Button -> Druck, Datei speichern + RESET
07.06.2018 11:27:34
Daniel
Hi
nach "Desktop" fehlt wahrscheinlich der Pfad-Trenner "\". Ich gehe mal davon aus, dass der dateinamé in B2 nicht mit "\" beginnt.
Gruß Daniel
AW: C-Button -> Druck, Datei speichern + RESET
07.06.2018 12:06:56
Chris
Hi Daniel,
du hast natürlich Recht, das habe ich total übersehen.
Ich habe jetzt auch noch eine Anpassung bezüglich der Dateiendung hinzugefügt, diese habe ich von einem anderen Code kopiert, welchen ich verwende - siehe nachfolgend in FETT.
Private Sub CommandButton1_Click()
Const FTYPE$ = ".xlsx" 'Dateityp der Ziel-Mappe
With ThisWorkbook.Sheets("Formular")
'--- Blatt drucken
.PrintOut
'--- Datei als Kopie speichern
.Copy
ActiveWorkbook.SaveCopyAs "C:\Users\XXX\Desktop\" & .Range("B1").Value & FTYPE
'--- Rücksetzen
.Range("B1,B2").ClearContents
End With
End Sub
Jetzt habe ich nur noch ein paar Anmerkungen und Wünsche:
-> ist es umsetzbar, dass eine Fehlermeldung aufpoppt, sollte in B1 keine Referenznr. stehen bzw. vergessen worden sein dort was einzutragen? Falls ja soll quasi der weitere Vorgang gar nicht ausführt werden.
-> besteht außerdem die Möglichkeit die Kopie, welche erzeugt und dann automatisch gespeichert wird, direkt wieder per Code zu schließen?
An dieser Stelle auch explizit: Vielen Dank für deine Geduld!!!
Gruß,
Chris
Anzeige
AW: C-Button -> Druck, Datei speichern + RESET
07.06.2018 13:11:21
Daniel
HI

Sub DruckenSpeichernRücksetzen()
With ThisWorkbook.Sheets("Tabelle A")
If .Range("B1").Value = "" Then
MsgBox "Bitte Referenznummer eintragen"
Else
'--- Blatt drucken
.PrintOut
'--- Datei als Kopie speichern (Tabelle A)
.Copy
ActiveWorkbook.SaveAs FileName:="C:\Users\XXX\Desktop\" & .Range("B2").Value, _
FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close
'--- Rücksetzen
.Range("B1,B2").ClearContents
End If
End With
End Sub

DANKE DANIEL!
07.06.2018 13:54:16
Chris
Daniel,
vielen vielen Dank, alles funktioniert perfekt!!!
Und ebenfalls nochmals ausdrücklichen Dank für dein Geduld!!!
Gruß,
Chris
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige