Sahanya » Skriptsprachen http://www.sahanya.perun.net Photoshop, Bücher, Filme, VB ... Wed, 23 Mar 2011 13:48:11 +0000 de hourly 1 http://wordpress.org/?v=3.1.1 Amazon-Linkgenerator http://www.sahanya.perun.net/archiv/2008/03/19/amazon-linkgenerator/ http://www.sahanya.perun.net/archiv/2008/03/19/amazon-linkgenerator/#comments Wed, 19 Mar 2008 11:41:33 +0000 Sahanya http://www.sahanya.perun.net/archiv/2008/03/19/amazon-linkgenerator/ Das Veröffentlichen von Links zu Amazonprodukten, insbesondere dann wenn es sich um einen Partnerlink handeln soll, kann man mit dem Programm Amazon-Linkgenerator vereinfachen: Einfach die ASIN (bei Büchern die 10stellige ISBN) und bei Bedarf die Partner-ID eingeben und schon erhält man verschiedene Linkvarianten (nur URL, als Textlink, als Bildlink). Alle Links kann man auch als BB-Code erhalten. Zum Kopieren der Codeschnipsel reicht ein Klick auf den entsprechenden Button.

Das Programm kann man entweder direkt über den Internet Explorer starten oder als Desktop-Version installieren.

Amazon-Linkgenerator

Starten (nur mit IE, .NET Framework 2.0 und Windows Installer 3.1)

Download (Desktop-Version)

]]>
http://www.sahanya.perun.net/archiv/2008/03/19/amazon-linkgenerator/feed/ 1
Sonderzeichen maskieren http://www.sahanya.perun.net/archiv/2008/01/16/sonderzeichen-maskieren/ http://www.sahanya.perun.net/archiv/2008/01/16/sonderzeichen-maskieren/#comments Wed, 16 Jan 2008 14:04:53 +0000 Sahanya http://www.sahanya.perun.net/archiv/2008/01/16/sonderzeichen-maskieren/ Klitzekleines Programm zum Maskieren von Sonderzeichen:

Sonderzeichen maskieren

Den zu bearbeitenden Text einfach in das Fenster “Originaltext” einfügen und dann auf “Start (Maskieren)” klicken. Ein Mausklick auf “Kopieren” fügt den umgewandelten Text in die Zwischenablage ein. Ein Klick auf “Eingabe löschen” leert das Fenster für den “Originaltext”.

Download

]]>
http://www.sahanya.perun.net/archiv/2008/01/16/sonderzeichen-maskieren/feed/ 2
Makro zeitlich einschränken http://www.sahanya.perun.net/archiv/2006/12/17/makro-zeitlich-einschraenken/ http://www.sahanya.perun.net/archiv/2006/12/17/makro-zeitlich-einschraenken/#comments Sun, 17 Dec 2006 08:42:16 +0000 Sahanya http://www.sahanya.perun.net/archiv/2006/12/17/makro-zeitlich-einschraenken/ Manchmal möchte man ein Makro zeitlich einschränken, also ein Datum angeben ab oder bis wann das Makro aktiviert werden soll, eventuell auch einen bestimmten Zeitraum. Dafür umschließt man die Prozedur einfach mit einer Datumseinschränkung:

Ab einem bestimmten Datum:

StartDatum = #12/31/2006#
If Now() > StartDatum Then
    ...
End If

Bis zu einem bestimmten Datum:

EndDatum= #12/31/2006#
If Now() < EndDatum Then
    ...
End If

Während eines bestimmten Zeitraumes:

StartDatum = #12/1/2006#
EndDatum = #1/1/2007#
If Now() >= StartDatum And Now() < EndDatum Then
    ...
End If

Via ExcelTips

]]>
http://www.sahanya.perun.net/archiv/2006/12/17/makro-zeitlich-einschraenken/feed/ 0
FaceID http://www.sahanya.perun.net/archiv/2006/02/26/faceid/ http://www.sahanya.perun.net/archiv/2006/02/26/faceid/#comments Sun, 26 Feb 2006 14:19:36 +0000 Sahanya http://www.sahanya.perun.net/archiv/2006/02/26/faceid/ FaceID Viewer

Wer beim Schreiben von Makros seine selbst erstellten Menüleisten mit kleinen Bildchen oder Symbolen aufpeppen möchte, muss dafür auf die sog. FacIDs zurückgreifen. In der einschlägigen Literatur findet man dazu seitenweise Listen. Das Excel-Addin FaceID Viewer von Doug Glancy erleichtert da die Arbeit sehr und hat auch noch die komfortable Funktion, dass die letzten benutzten IDs in einer separaten Liste abgelegt werden, wo man sie dann einfach wiederfinden kann. Zudem kann man sich die IDs auch thematisch auflisten lassen.

]]>
http://www.sahanya.perun.net/archiv/2006/02/26/faceid/feed/ 0
Datum http://www.sahanya.perun.net/archiv/2006/02/05/datum/ http://www.sahanya.perun.net/archiv/2006/02/05/datum/#comments Sun, 05 Feb 2006 12:55:26 +0000 Sahanya http://www.sahanya.perun.net/archiv/2006/02/05/datum/ Schon oft habe ich mich darüber geärgert, dass ich mir in der Taskleiste nicht das aktuelle Datum anzeigen lassen kann, sondern nur die Uhrzeit. (Ich lasse mich da übrigens gerne eines besseren belehren.)

Bei Skrommel habe ich nun ein AHK-Skript gefunden, das das Datum und die Uhrzeit im Wechsel auf dem Windows-Start-Button anzeigt. Ich habe das Skript so gekürzt, dass es nur noch das aktuelle Datum anzeigt.

;Datum.ahk
;Zeigt das aktuelle Datum auf dem Windows-Start-Button
;Original von Skrommel 2005
;Anpassung von Sahanya 2006

#Persistent

ControlGetPos,,,bredde,,Button1,ahk_class Shell_TrayWnd
bredde+=2

ControlMove,Button1,,,%bredde%,,ahk_class Shell_TrayWnd
ControlSetText,Button1,%A_DD%.%A_MM%,ahk_class Shell_TrayWnd

Ergänzt man das Skript noch um #NoTrayIcon (vor oder hinter das #Persistent), so wird in der Taskleiste kein Symbol für das laufende Programm angezeigt.

Download

]]>
http://www.sahanya.perun.net/archiv/2006/02/05/datum/feed/ 4
Versteckte Zeilen und Spalten http://www.sahanya.perun.net/archiv/2005/12/24/versteckte-zeilen-und-spalten/ http://www.sahanya.perun.net/archiv/2005/12/24/versteckte-zeilen-und-spalten/#comments Sat, 24 Dec 2005 11:04:21 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/12/24/versteckte-zeilen-und-spalten/ Versteckte bzw. ausgeblendete Zeilen und Spalten in Excel-Dokumenten können, insbesondere nach der Speicherung als Textdatei zu unschönen Überraschungen führen. Oft werden diese Zellen nämlich versteckt, weil ihr Inhalt nicht mehr benötigt wird. Dabei wird entweder die Excel-interne Methode „Ausblenden” benutzt oder aber (alles schon gesehen) Zeilen bzw. Spalten manuell verkleinert, so dass ihr Inhalt nicht mehr sichtbar ist.

Bei umfangreichen Dokumenten, die man nun weiterverarbeiten möchte, können solche Zeilen und Spalten leicht übersehen werden oder aber das Einblenden und anschließende Löschen zu einer Sisyphusarbeit ausarten. Ein VBA-Makro kann diese Arbeit allerdings leicht übernehmen:

Sub versteckte_loeschen()
    Dim r As Range
    For Each r In Rows(1).Cells
        If r.Width < 1 Then r.EntireColumn.Delete
    Next
    For Each r In Columns(1).Cells
        If r.Height < 1 Then r.EntireRow.Delete
    Next
End Sub

Versteckte löschen

]]>
http://www.sahanya.perun.net/archiv/2005/12/24/versteckte-zeilen-und-spalten/feed/ 0
Neue Ordner melden http://www.sahanya.perun.net/archiv/2005/11/20/neue-ordner-melden/ http://www.sahanya.perun.net/archiv/2005/11/20/neue-ordner-melden/#comments Sun, 20 Nov 2005 14:15:18 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/11/20/neu-ordner-melden/ Das folgende Autohotkey-Skript meldet sich alle 10 Minuten und zeigt dann an wieviele Ordner (ohne Unterordner) sich in einem bestimmten Verzeichnis befinden, deren Name nicht bestimmte Worte (hier: „bearbeitet” oder „erledigt”) enthält.

Dies ist sinnvoll, wenn man Ordner hat, die abgearbeitet werden sollen, man aber nicht immer nachschauen möchte, um zu sehen, ob neue noch unbearbeite Ordner hinzugekommen sind. (Das Umbenennen von bereits bearbeiteten Ordnern habe ich hier schon einmal demonstriert.

; neue Ordner, ohne die „Worte” werden alle 10 Minuten angezeigt

#Persistent
SetTimer, NeueOrdner, 600000 ;1.000 = 1 Sekunde
return

NeueOrdner:
FileList =  ; Leere Liste
folder_count = 0  ;Zähler bei Null beginnen
Worte = bearbeitet,erledigt ;Worte ohne (!) Leerzeichen

Loop, C:\ahktest\*, 2       ;Alle Ordner, ohne Unterordner

  FileList = %FileList%%A_LoopFileName%`n

  Loop, parse, FileList, `n
  {
	if A_LoopField =  ; Leerzeichen am Ende ignorieren
  	continue

	 If A_LoopField not contains %Worte%      ;für eine Liste von Wörter
         ;IfNotInString, A_LoopField, %Worte%     ;wenn man nur ein Wort hat
	     {
	     folder_count++
             }
  }
If folder_count > 0
  MsgBox, %folder_count% neue Ordner

exit
]]>
http://www.sahanya.perun.net/archiv/2005/11/20/neue-ordner-melden/feed/ 0
Index für Excel http://www.sahanya.perun.net/archiv/2005/11/02/index-fur-excel/ http://www.sahanya.perun.net/archiv/2005/11/02/index-fur-excel/#comments Wed, 02 Nov 2005 18:19:14 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/11/02/index-fur-excel/ Index Gerade bei umfangreichen Excel-Dokumenten kann es schnell passieren, dass man bei einer hohen Anzahl von Tabellenblättern den Überblick verliert. Ein Makro kann da Abhilfe schaffen. Es erstellt ein neues Tabellenblatt mit dem Namen „Index” als erstes Tabellenblatt und listet dort die Namen der anderen Tabellenblätter auf. Diese sind verlinkt, so dass man mit einem Klick auf dem gewünschten Tabellenblatt landet. Auf den einzelnen Tabellenblättern wird ein Link zum Index-Tabellenblatt eingefügt. Hier sollte man allerdings aufpassen, denn dieser wird (hier im Beispiel) in die Zelle „H1” eingefügt und überschreibt somit den ursprünglichen Inhalt. Man sollte dies also evtl. anpassen. Das Makro selbst habe ich bei Lockergnome gefunden und erweitert um die Mitteilung, dass bereits ein Index existiert. Außerdem habe ich das ganze ergänzt um ein Makro, das den Index und sämtliche Links dorthin wieder löscht.

Sub Index()
Dim wSheet As Worksheet
Dim M As Long
M = 1

On Error Resume Next
If Worksheets(1).Name = "Index" Then
MsgBox "Ein Index besteht bereits."
Else
Worksheets.Add Before:=ActiveWorkbook.Worksheets(1)
Worksheets(1).Name = "Index"
End If

With ActiveWorkbook.Worksheets(1)
.Columns(1).ClearContents
.Cells(1, 1) = "INDEX"
.Cells(1, 1).Name = "Index"
End With

For Each wSheet In Worksheets
If wSheet.Name <> ActiveWorkbook.Worksheets(1).Name Then
M = M + 1
With wSheet
.Range("H1").Name = "Start" & wSheet.Index
.Hyperlinks.Add Anchor:=.Range("H1"), Address:="", SubAddress:="Index", TextToDisplay:="Zurück zum Index"
End With
ActiveWorkbook.Worksheets(1).Hyperlinks.Add Anchor:=ActiveWorkbook.Worksheets(1).Cells(M, 1), Address:="", _
SubAddress:="Start" & wSheet.Index, TextToDisplay:=wSheet.Name
End If
Next wSheet
End Sub

Wenn man diesen Index nicht mehr benötigt, kann man ihn mit folgendem Makro wieder löschen:

Sub Index_entfernen()
Dim wSheet As Worksheet

On Error GoTo Fehlermeldung
Application.DisplayAlerts = False 'Unterdrückt Sicherheitsabfrage
Worksheets("Index").Delete
Application.DisplayAlerts = True

For Each wSheet In ActiveWorkbook.Worksheets
wSheet.Activate
Range("H1").Select
Selection.ClearContents
Next wSheet

Exit Sub
Fehlermeldung:
MsgBox ("Es gibt kein Index.")

End Sub

]]>
http://www.sahanya.perun.net/archiv/2005/11/02/index-fur-excel/feed/ 0
Skript-Sammlung http://www.sahanya.perun.net/archiv/2005/09/30/skript-sammlung/ http://www.sahanya.perun.net/archiv/2005/09/30/skript-sammlung/#comments Fri, 30 Sep 2005 11:57:15 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/09/30/skript-sammlung/ Skript-Sammlung

Beim Stöbern im AHK-Forum bin ich auf ein interessantes Skript gestoßen, das einem hilft eine eigene Skriptsammlung zu erstellen. Hier kann man entweder häufig benutzte Skripte ablegen oder aber auch Kompliziertes, so dass man bestimmte Sachen nicht erst duch das langwierige Suchen in alten Projekten wiederfindet.

Für diejenigen, die AHK nicht installiert haben, gibt es hier die gezippte exe-Version.

]]>
http://www.sahanya.perun.net/archiv/2005/09/30/skript-sammlung/feed/ 2
Datei speichern wenn http://www.sahanya.perun.net/archiv/2005/08/17/datei-speichern-wenn/ http://www.sahanya.perun.net/archiv/2005/08/17/datei-speichern-wenn/#comments Wed, 17 Aug 2005 17:02:30 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/08/17/datei-speichern-wenn/ PC herunterfahren Noch hilfreicher als der Code-Schnippsel hier zum speichern einer Datei, wenn der PC heruntergefahren werden soll, ist es wenn das ganze im Hintergrund läuft. Dafür muss man das Skript wie folgt erstellen:

#NoTrayIcon
#Persistent
OnExit, ExitSub
return
ExitSub:
; Wenn der PC ausgeschaltet wird
if A_ExitReason in Shutdown
{
FileCopy, C:\datei.txt, C:\%A_DD%-%A_MM%-%A_YYYY%-datei.txt, 1
}
ExitApp

]]>
http://www.sahanya.perun.net/archiv/2005/08/17/datei-speichern-wenn/feed/ 0
Speichern und runterfahren http://www.sahanya.perun.net/archiv/2005/08/01/speichern-und-runterfahren/ http://www.sahanya.perun.net/archiv/2005/08/01/speichern-und-runterfahren/#comments Mon, 01 Aug 2005 18:50:29 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/08/01/speichern-und-runterfahren/ Wenn man am Ende des Arbeitstages immer eine bestimmte Datei mit dem aktuellen Datum speichern möchte, ist es das einfachste dies mit dem Herunterfahren des PCs zu kombinieren. Mit einem AHK-Skript gelingt dies sehr einfach:

; Datei speichern mit aktuellem Datum und PC runterfahren

FileCopy, C:\datei.txt, C:\%A_DD%-%A_MM%-%A_YYYY%-datei.txt, 1

Shutdown, 1

Ein schöner Nebeneffekt ist auch, dass das lästige Bestätigen des Herunterfahrens des PCs entfällt, also habe ich mir noch eine
*.exe-Datei erstellt, die den PC mit wirklich nur einem Klick (ok Doppelklick) herunterfährt.

]]>
http://www.sahanya.perun.net/archiv/2005/08/01/speichern-und-runterfahren/feed/ 1
Leere Zellen http://www.sahanya.perun.net/archiv/2005/07/16/leere-zellen/ http://www.sahanya.perun.net/archiv/2005/07/16/leere-zellen/#comments Sat, 16 Jul 2005 12:14:18 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/07/16/leere-zellen/ Leere Tabellenzellen in Word

Wenn man in Word viel mit Tabellen arbeitet, bzw. diese bearbeiten muss, kann es manchmal nötig sein alle leeren Zellen zu entfernen. Der Trick dabei ist, dass die leeren Tabellenzellen in Wahrheit überhaupt nicht leer sind, sondern zwei Zeichen beinhalten: Chr(13) und Chr(7). Deswegen muss man dies beim Löschen per VBA berücksichtigen. Ein Makro, das die leeren Zellen der Tabelle löscht, in der sich gerade der Cursor befindet könnte dann so aussehen:

Sub LeereZellen()
Dim oCell As Cell
Dim oRow As Row
On Error GoTo TabellenFM
For Each oRow In Selection.Tables(1).Rows
    For Each oCell In oRow.Cells
        If oCell.Range.Text = Chr(13) & Chr(7) Then
        oCell.Delete ShiftCells:=wdDeleteCellsShiftLeft
        End If
    Next oCell
Next oRow
Exit Sub
TabellenFM: MsgBox ("Fehler: Der Cursor befindet sich nicht in einer Tabelle.")
End Sub

Noch mehr Beispiele gibt es bei Word MVP

Die Angabe ShiftCells:=wdDeleteCellsShiftLeft bedeutet dabei, dass die verbleibenden Zellen der Reihe nach links verschoben werden. Da dies auch die Standardeinstellung ist, kann man auf diese Angabe verzichten. Möchte man jedoch, dass sich die verbleibenden Zellen anders verhalten muss man hier Änderungen vornehmen:

wdDeleteCellsShiftUp entspricht: Zellen nach oben verschieben
wdDeleteCellsEntireRow entspricht: ganze Zeile löschen
wdDeleteCellsEntireColumn entspricht: ganze Spalte löschen

Noch ein kleiner Tipp am Rande. Wenn sich eine Tabelle in einem Worddokument ganz am Anfang (also am oberen Seitenrand befindet) und man über der Tabelle noch etwas einfügen möchte, kann das ganz schön nervenaufreibend sein, denn der Cursor läßt sich nur in die erste Tabellenzeile setzen. Um eine leere Zeile über der Tabelle zu erhalten muss man den Cursor in die oberste Tabellenzeile setzen und dann aus dem Menü „Tabelle” den Punkt „Tabelle teilen” wählen.

]]>
http://www.sahanya.perun.net/archiv/2005/07/16/leere-zellen/feed/ 0
Suche/Ersetze nach Abfrage http://www.sahanya.perun.net/archiv/2005/06/05/sucheersetze-nach-abfrage/ http://www.sahanya.perun.net/archiv/2005/06/05/sucheersetze-nach-abfrage/#comments Sun, 05 Jun 2005 10:11:38 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/06/05/sucheersetze-nach-abfrage/ Fußnoten Aufgabe: In einem Word-Dokument sind verschiedene Fußnoten (keine „echten” Fußnoten, sondern einfacher Text), die unterschiedliche Tags bekommen sollen. Also, die Fußnote 1) soll einen Tag mit der ID f1 bekommen, die Fußnote 2) einen Tag mit der ID f2, die Fußnote * soll den Tag mit der ID f3 bekommen usw. Dies kann durch einen simplen Suche/Ersetze-Vorgang in Word erreicht werden:

Suche: 1), ersetze mit: <FnR RefID=f1>1)</FnR>

Um diesen Vorgang auch für Benutzer, die im Umgang mit Word sehr unerfahren sind komfortabel zu gestalten und um sich das lästige Eintippen des kompletten Tags zu ersparen, habe ich ein Makro erstellt.


Die Userform beinhaltet folgendes:

Private Sub Abbrechen_Click()
    Unload Fussnoten
End Sub

Private Sub Ersetze_Change()
End Sub

Private Sub OK_Click()
    FussnotenTags
End Sub

Private Sub Suche_Change()
End Sub

Folgendes Makro ruft die Userform auf:

Sub FussnotenAbfrage()
    Fussnoten.Show vbModeless
End Sub

Dieses Makro verarbeitet die eingegebenen Angaben:

Sub FussnotenTags()

strSuche = Fussnoten.Suche.Text
strErsetze = Fussnoten.Ersetze.Text

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = strSuche & "^t"
        .Replacement.Text = "<FnR RefID=" & strErsetze & ">" & strSuche & "</FnR>"
        .Forward = True
        .Wrap = wdFindContinue
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
Unload Fussnoten
End Sub

Kritische Stellen (je nach Dokument) sind jedoch leider noch vorhanden:

Da man bei einer Suche nach Zahlen oder Zeichen, aus denen eine klassische Fußnote ja besteht, nicht die Option “ganzes Wort” aktivieren kann, bzw. die Einstellung .MatchWholeWord = True keine Auswirkung hat, muss zuerst nach zweistelligen Fußnoten gesucht werden und dann nach einstelligen.

Außerdem habe ich die Suche eingeschränkt, so dass nach dem gesuchten Zeichen ein Tabstopp folgen muss. Damit verhindere ich, dass das Makro die Fußnote „11)” noch einmal findet, wenn danach nach der Fußnote „1)” gesucht wird. Diese Abgrenzung könnte je nach Dokument natürlich auch ein Leerschritt, Punkt o. ä. sein.

]]>
http://www.sahanya.perun.net/archiv/2005/06/05/sucheersetze-nach-abfrage/feed/ 0
Tabellenblätter speichern http://www.sahanya.perun.net/archiv/2005/05/06/tabellenblaetter-speichern/ http://www.sahanya.perun.net/archiv/2005/05/06/tabellenblaetter-speichern/#comments Fri, 06 May 2005 06:54:54 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/05/06/tabellenblatter-speichern/ Tabellenblätter in Excel Wenn man in einem Excel-Dokument Tabellen auf mehreren Tabellenblättern eingefügt hat, kann man diese zwar im Gesamten ausdrucken, doch man kann sie nicht in einem anderen Format (z. B. als Textdatei) speichern, denn Excel speichert bei so einem Vorgang nur das erste Tabellenblatt. Um also den kompletten Dateiinhalt in eine Textdatei zu bekommen, muss man sich die Inhalte der Tabellenblätter auf ein einzelnes Tabellenblatt kopieren. Mit Hilfe von VBA kann man dies automatisieren:

Sub Tabellenblaetter()
Dim TabellenBlatt As Byte
Dim FreieZeile As Integer

Worksheets(1).Activate

For TabellenBlatt = 2 To Sheets.Count

FreieZeile = Worksheets(1).UsedRange.SpecialCells(xlCellTypeLastCell).Row
Worksheets(TabellenBlatt).UsedRange.Copy _
Destination:=Worksheets(1).Cells(FreieZeile + 1, 1)

Next TabellenBlatt

End Sub

]]>
http://www.sahanya.perun.net/archiv/2005/05/06/tabellenblaetter-speichern/feed/ 0
Makro in Word rückgängig machen http://www.sahanya.perun.net/archiv/2005/04/18/makro-in-word-rueckgaengig-machen/ http://www.sahanya.perun.net/archiv/2005/04/18/makro-in-word-rueckgaengig-machen/#comments Mon, 18 Apr 2005 18:01:42 +0000 Sahanya http://www.sahanya.perun.net/archiv/2005/04/18/makro-in-word-ruckgangig-machen/ Rückgängig Gerade bei umfangreichen Makros kann das Rückgängigmachen der einzelnen Schritte recht mühsam werden. Bei der Suche nach einer Lösung, die es ermöglicht ein komplettes Makro oder aber auch mehrere Makros, die in einem Schritt ablaufen, die man aber aus Gründen der Übersichtlichkeit im Code auf mehrere Makros verteilt hat, bin ich auf eine Lösung von Roemer Lievaart gestoßen. Diese ist zwar für Word97 ausgewiesen, funktioniert aber auch in Word2003.

Dazu setzt man die Zeile StartUndoSaver einfach an den Beginn eines Makros und die Zeile EndUndoSaver an das Ende, so dass man folgendes erhält:

Sub Irgendwas
StartUndoSaver

Hier kommt der Code.
EndUndoSaver
End Sub

Zusätlich muss man noch folgende Makros haben, die man am Besten in einem eigenen Modul einfügt:


Option Explicit

Sub StartUndoSaver()
On Error Resume Next
ActiveDocument.Bookmarks.Add "_InMacro_"
On Error GoTo 0
End Sub

Sub EndUndoSaver()
On Error Resume Next
ActiveDocument.Bookmarks("_InMacro_").Delete
On Error GoTo 0
End Sub

Sub EditUndo() ' Catches Ctrl-Z
If ActiveDocument.Undo = False Then Exit Sub
While BookMarkExists("_InMacro_")
If ActiveDocument.Undo = False Then Exit Sub
Wend
End Sub

Sub EditRedo() ' Catches Ctrl-Y
If ActiveDocument.Redo = False Then Exit Sub
While BookMarkExists("_InMacro_")
If ActiveDocument.Redo = False Then Exit Sub
Wend
End Sub

Private Function BookMarkExists(Name As String) As Boolean
On Error Resume Next
BookMarkExists = Len(ActiveDocument.Bookmarks(Name).Name) > -1
On Error GoTo 0
End Function

TextmarkeNach dem Ausführen eines Makros, das mit dem Code (StartUndoSaver und EndUndoSaver) umschlossen wurde, kann man jetzt mit Strg+Z das komplette Makro rückgängig machen und mit Strg+Y wieder herstellen.

In der Dropdownliste erkennt man das umschlossene Makro an den „Textmarken”.

So und jetzt bin ich noch auf der Suche nach einer ähnlichen Lösung für Excel-Makros. Eine Möglichkeit habe ich dazu bei J-Walk.com gefunden, werde aber nicht recht schlau daraus.

]]>
http://www.sahanya.perun.net/archiv/2005/04/18/makro-in-word-rueckgaengig-machen/feed/ 3