Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1296to1300
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

Makro rückgängig machen

Makro rückgängig machen
11.02.2013 17:49:18
mike49
Hallo zusammen,
wie kann man ein ausgeführtes Makro rückgänig machen. Also ein Undo einfügen oder so?
Gruß
mike49

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro rückgängig machen
11.02.2013 17:59:34
Martin
Hallo Mike,
eine Makro kann nicht rückgängig gemacht werden. Du kannst aber eine manuelle Aktion mit...
Application.Undo
...wieder rückgängig machen.
Viele Grüße
Martin

AW: Makro rückgängig machen
11.02.2013 18:25:58
mike49
Hallo Martin,
wie macht man das. Kannst du mir die Vorgehensweise kurz beschreiben?
Gruß
mike49

Habs' hingekriegt . . .
11.02.2013 19:26:52
mike49
mit diesem Makro in einem Modul:
Sub Rückgägig()
FName = ActiveWorkbook.FullName
Application.ScreenUpdating = False
Workbooks.Open Filename:=FName
Application.ScreenUpdating = True
End Sub

Allerding flackert immer noch der Bildschirm, trotz Application.ScreenUpdating. Habe ich das vielleicht an der falschen Stelle eingefügt?
Gruß
mike49

Anzeige
AW: Habs' hingekriegt . . .
11.02.2013 19:29:22
Hajo_Zi
warum muss ActiveWorkbook. nochmal geöffnet werden?

AW: Habs' hingekriegt . . .
11.02.2013 19:47:35
mike49
Hallo Hajo,
wie wär's eleganter, damit die zuvor gemachten Änderungen rückgänig gemacht werden. Kenne mich mit VBA nicht so aus.
Gruß
mike49

AW: Habs' hingekriegt . . .
11.02.2013 19:51:48
Hajo_Zi
Hallo mike,
Warum nicht wie vorgeschlagen mit Undo, Makro Befehle können nicht rückgängig gemacht werden.
Gruß Hajo

AW: Habs' hingekriegt . . .
11.02.2013 19:54:07
mike49
Hallo Hajo,
leider weiß ich nicht wie man das macht.
Gruß
mike49

Anzeige
AW: einfach kopieren
11.02.2013 19:57:42
Hajo_Zi
hallo Mike,
ist es so kompliziert die Zeile aus dem Forum zu kopieren und im Code einzufügen wo Du es Rückgängig machen willst?
Gruß Hajo

AW: einfach kopieren
11.02.2013 20:18:23
mike49
Hallo Hajo,
anscheinend habe ich es nicht genau genug erklärt. Es soll nicht eine Aktion rückgänig gemacht werden, sondern das Tabellenblatt, das mit dem Makro geändert wurde, wieder hergestellt werden. Das funktioniert mit dem Makro:
Sub Rückgägig()
FName = ActiveWorkbook.FullName
Application.ScreenUpdating = False
Workbooks.Open Filename:=FName
Application.ScreenUpdating = True
End Sub

allerdings mit dem flackernden Bildschirm.
Natürlich könnte man die geänderte Datei beim Schließen auch nicht speichern ;)
Gruß
mike49

Anzeige
Vorsicht, du hast da was falsch verstanden!
11.02.2013 20:39:58
Klaus
Hallo Mike,
dein Makro macht aber nichts rückgängig! Es macht nichts anderes, als die Datei vom letzten Save wieder zu öffnen. Da kannst du genauso gut ohne zu speichern schließen, wie du selbst geschrieben hast.
Nimm mal diese Extremsituation:
- ich öffne die Datei
- ich arbeite 2h intensiv in der Datei ohne zu speichern
- ich führe dein Makro X aus
- ich führe dein angeblich-rückgängig Makro aus
2h meiner Arbeit sind jetzt futsch und du bist schuld! :-)
Besser: Füge in das Makro eine Save-Routine ein, die deine Datei unter "Dateiname_TTMMJJJJ_HHMM" speichert.
Grüße,
Klaus M.vdT.

Anzeige
Vorsicht, du hast da was falsch verstanden!
11.02.2013 20:55:06
mike49
Hallo Klaus,
das habe ich verstanden.
Mit diesem Makro wird mein Inhaltsverzeichnis sortiert:
Sub SortierenTitel()
Dim wksOriginal As Worksheet, wksSort As Worksheet
Dim wbk As Workbook
Dim lngZeileMax As Long, lngZeile As Long, intPos As Integer
Dim strBS As String
Set wbk = ActiveWorkbook
Set wksOriginal = ActiveSheet
Application.ScreenUpdating = False
'temporäres Blatt zum Sortieren anlegen
wbk.Worksheets.Add after:=wbk.Sheets(wbk.Sheets.Count)
Set wksSort = wbk.Sheets(wbk.Sheets.Count)
'Originaldaten in temporäres Blatt kopieren
With wksOriginal
lngZeileMax = .Cells(.Rows.Count, 1).End(xlUp).Row
.Range(.Cells(2, 1), .Cells(lngZeileMax, 3)).Copy _
Destination:=wksSort.Cells(1, 1)
.Range(.Cells(2, 5), .Cells(lngZeileMax, 7)).Copy _
Destination:=wksSort.Cells(1 * (lngZeileMax - 1) + 1, 1)
.Range(.Cells(2, 9), .Cells(lngZeileMax, 11)).Copy _
Destination:=wksSort.Cells(2 * (lngZeileMax - 1) + 1, 1)
End With
With wksSort
'Sortieren nach Titel
With .Range(.Cells(1, 1), .Cells(3 * (lngZeileMax - 2), 3))
.Sort Key1:=.Range("B1"), order1:=xlAscending, Header:=xlNo
End With
'nicht benutzte Zeilen löschen
.Range(.Cells(.Rows.Count, 1).End(xlUp), _
.Cells(.Rows.Count, 2).End(xlUp).Offset(1, 2)).ClearContents
'1. Buchstabe im Titel fett, wenn 1. Buchstabe wechselt
strBS = ""
For lngZeile = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
If strBS  Left(.Cells(lngZeile, 2).Text, 1) Then
.Cells(lngZeile, 2).Characters(1, 1).Font.Name = "Arial Black"
strBS = Left(.Cells(lngZeile, 2).Text, 1)
End If
Next
'Daten wieder ins Original kopieren
.Range(.Cells(1, 1), .Cells(lngZeileMax - 1, 3)).Copy _
Destination:=wksOriginal.Cells(2, 1)
.Range(.Cells(1 * (lngZeileMax - 1) + 1, 1), .Cells(2 * (lngZeileMax - 1), 3)).Copy _
Destination:=wksOriginal.Cells(2, 5)
.Range(.Cells(2 * (lngZeileMax - 1) + 1, 1), .Cells(3 * (lngZeileMax - 1), 3)).Copy _
Destination:=wksOriginal.Cells(2, 9)
'temporäres Blatt wieder löschen
Application.DisplayAlerts = False
.Delete
Application.DisplayAlerts = True
End With
wksOriginal.Activate
Application.ScreenUpdating = True
End Sub

Ich möchte nun, nachdem ich das sortierte Blatt ausgedruckt habe, den ursprünglichen Zustand des Blattes wiederherstellen. Wie würdest du das machen?
Gruß
mike49

Anzeige
AW: Vorsicht, du hast da was falsch verstanden!
11.02.2013 21:21:38
Klaus
Ich möchte nun, nachdem ich das sortierte Blatt ausgedruckt habe, den ursprünglichen Zustand des Blattes wiederherstellen. Wie würdest du das machen?
Ich würd das Blatt in ein neues, leeres Blatt kopieren und von dort aus damit was-auch-immer machen, statt im Original rumzuwursten und dann eine halbgare Alibi-Rückgängig Funktion zu benutzen. Andererseits: wenns funktioniert, muss es nicht repariert werden :-)
Grüße,
Klaus M.vdT.

AW: Vorsicht, du hast da was falsch verstanden!
11.02.2013 21:30:45
mike49
Hallo Klaus,
das wäre eine Lösung.
Könnte man auch so verfahren, dass das Makro das sortierte Blatt in eine neue Tabelle (Tabelle 2)innerhalb der Mappe schreibt? So würde das Originalblatt bleiben.Wie müsste dann das SortierenTitel-Makro lauten?
Gruß
mike49

Anzeige
sheets.add
12.02.2013 08:05:58
Klaus
Hallo Mike,
ein neues sheet innerhalb der Tabelle erstellst du mit "sheets.add". Praktischerweise liegt dieses dann auch gleich im Focus, dH es ist das "Active Sheet".
Also ganz grob so (aus dem Ärmel, ungetestet)
sub SortiereInNeuerTabelle()
dim wksNew as worksheet
sheets.add
set wksNew = activesheet
sheets("[URSPRUNGSTABELLE]").cells.copy
wksnew.range("A1").pastespecial
[DEIN SORTIERMAKRO, referenziert auf wksNew]
wksnew.print
wksnew.delete
end sub
Den Kniff mit dem wksNew braucht es eigentlich nicht, aber ich referenziere nur sehr ungerne auf "active sheet" ... da kann zu schnell was schief gehen.
Grüße,
Klaus M.vdT.

Anzeige
sheets.add
12.02.2013 14:05:05
mike49
Hallo Klaus,
so wäre es im Prinzip prima. Aber leider krieg ich das mit dem Makro nicht hin.
Ich würde gerne mal die Datei hochladen und dich bitten, dir das mal anzuschauen.
https://www.herber.de/bbs/user/83870.xlsm
Gruß
mike49

Sorry, ist mir zu viel
13.02.2013 09:10:03
Klaus
Hallo Mike,
ich hab mir die Funktion deines Sortierenmakros nicht angeschaut.
Sub SortiereInNeuerTabelle()
Dim wksNew As Worksheet
Dim wksOld As Worksheet
Set wksOld = Sheets("Tabelle1") 'ANPASSEN
Sheets.Add
Set wksNew = ActiveSheet
wksOld.Cells.Copy
wksNew.Range("A1").PasteSpecial
SortierenTitel
wksNew.Print
application.displayalerts = false
wksNew.Delete
application.displayalerts = true
End Sub
Grüße,
Klaus M.vdT.

Anzeige
Betreff war falsch: Gelöst
13.02.2013 09:25:29
Klaus
Hi Mike,
der Betreff meines letzten Beitrags ist natürlich falsch, da hatte ich geträumt ich währ in einem anderen Beitrag.
Grüße,
Klaus M.vdT.

AW: Betreff war falsch: Gelöst
13.02.2013 13:13:12
mike49
Hallo Klaus,
danke, dass du dich der Sache nochmals angenommen hast.
Es klappt im Prinzip. Es kommt aber die Meldung: Laufzeitfehler '438. Objekt unterstützt diese Eigenschaft oder Methode nicht.
Im Debugger ist die Zeile "wksNew.Print" gelb unterlegt.
Gruß
mike49

Flüchtigkeitsfehler
13.02.2013 13:20:35
Klaus
Hi Mike,
hab die Syntax nicht richtig im Kopf gehabt.
wksNew.PrintOut sollte funktionieren.
oder
wksNew.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
oder
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
(das letzte ist 1:1 der Code aus dem Makrorekorder)
Grüße,
Klaus M.vdT.

Anzeige
AW: Flüchtigkeitsfehler
13.02.2013 13:49:25
mike49
Hallo Klaus,
die durch das Makro erzeugte sortierte Tabelle soll nicht gleich ausgedruckt, sondern nur neben der bestehenden Tabelle 1 erzeugt werden und die Seiteneinstellungen beibehalten werden.
Habe die Codes ausprobiert. Mit den vorgeschlagen Codezeilen wird jedesmal die sortierte, 1-seitige Tabelle gleich als mehrseitige ausgedruckt, weil die Seiteneinstellungen nicht 1:1 übernommen werden.Es wird keine sortierte Tabelle 2 im Reiter sichtbar.
Gruß
mike49

AW: Flüchtigkeitsfehler
13.02.2013 13:54:54
Klaus
Hallo Mike,
du hast innerhalb dieses Threads, genau genommen hier:
https://www.herber.de/forum/messages/1298795.html
explizit die Aufgabe gestellt, dass das sortierte Blatt gedruckt werden soll. Diese Aufgabe habe ich gelöst. Vom Übernehmen der Seiteneinstellungen, das Blatt nebeneinander stellen oder das Blatt zu behalten war keine Rede.
Ich habe keine Lust, jetzt die nächste Aufgabe zu lösen und dann ändert sich die Aufgabe wieder: dann wären schon zwei meiner Ansätze für den Wind, und dafür ist mir meine Zeit zu schade.
Grüße,
Klaus M.vdT.

AW: Flüchtigkeitsfehler
13.02.2013 14:42:31
mike49
Hallo Klaus,
ich hatte geschrieben:
"Ich möchte nun, nachdem ich das sortierte Blatt ausgedruckt habe, den ursprünglichen Zustand des Blattes wiederherstellen."
Ich verstehe das so, dass ich das sortierte Blatt ausdrucke und nicht das Sortiermakro den Druckprozess anstoßen soll.Ich dachte auch, dass bei der 1:1 Kopie in ein neues Blatt die Seiteneinstellungen übernommen werden.
Ich werde nun die mit meinem Sortiermakro erstellte Tabelle ausdrucken oder unter einem neuen Namen abspeichern und später ausdrucken. Die Originaltabelle sichere ich durch Nichtspeichern beim Schließen. Ist zwar ein wenig umständlich aber ich kann damit leben.
Wie dem auch sei. Ich danke ich dir für deine Bemühungen.
Gruß
mike49

8 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige