Undo nach Makro

23/07/2011 - 09:25 von Peter | Report spam
Hallo,
ich habe ein Makro das Werte in die aktive Zelle und denen
daneben schreibt.
Sub Zwanzig()
Application.ScreenUpdating = False
Worksheets("T1").Activate
Dim aktivzelle As String
aktivzelle = ActiveCell.Address
ActiveCell.NumberFormat = "@" 'Zelle als Text formatieren
Worksheets("T1").Range(akivtzelle).Value = "010"
ActiveCell.Offset(0, 1).Select
ActiveCell.NumberFormat = "@" 'Zelle als Text formatieren
ActiveCell.Value = "020"
Application.ScreenUpdating = True
End Sub

Wenn der Anwender nun aus Versehen zweimal die Schaltflàche klickt oder
die falsche Zelle ausgewàhlt hat werden die Werte darin überschrieben.
Ich brauche eine Lösung um die überschriebenen Werte zurückholen zu
können, Beispielsweise vor Ausführung des Makros die zu überschreibenden
Zellinhalte in die Zwischenablage zu kopieren.

mfg
Peter
 

Lesen sie die antworten

#1 Claus Busch
23/07/2011 - 09:51 | Warnen spam
Hallo Peter,

Am Sat, 23 Jul 2011 09:25:23 +0200 schrieb Peter:

Sub Zwanzig()
Application.ScreenUpdating = False
Worksheets("T1").Activate
Dim aktivzelle As String
aktivzelle = ActiveCell.Address
ActiveCell.NumberFormat = "@" 'Zelle als Text formatieren
Worksheets("T1").Range(akivtzelle).Value = "010"
ActiveCell.Offset(0, 1).Select
ActiveCell.NumberFormat = "@" 'Zelle als Text formatieren
ActiveCell.Value = "020"
Application.ScreenUpdating = True
End Sub



ich würde nicht Blatt T1 vom Makro aktivieren lassen. Denn der Code wird
direkt ausgeführt und du hast keine Kontrolle, welche Zelle die
ActiveCell gewesen ist. aktivzelle brauchst du nicht. Select braucht man
auch nicht. Die beiden nebeneinander liegenden Zellen kannst du auf
einen Rutsch formatieren.
Du kannst deine gwünschte Zelle mit ActiveCell ansprechen.

Also überprüfe im Code ob das aktive Blatt das Blatt T1 ist. Und dann
überprüfe, ob die Spalte der aktiven Zelle richtig ist und lass nur dann
den Code ausführen.
Dein ursprünglicher Code bereinigt, sollte so aussehen:

Application.ScreenUpdating = False
ActiveCell.Resize(1, 2).NumberFormat = "@"
ActiveCell = "010"
ActiveCell.Offset(0, 1) = "020"
Application.ScreenUpdating = True


Mit freundlichen Grüssen
Claus Busch
Win XP Prof SP2 / Vista Ultimate SP2
Office 2003 SP2 /2007 Ultimate SP2

Ähnliche fragen