2008-12-04 35 views

cevap

21

Excel VBA bu işlemek için Application.OnUndo işlevi vardır: Makro ilk satırı sonra bir yedek dizindeki bir kopyasını saklamanızı çalışma kitabını kapatın ve orijinali yeniden olarak

Public Sub DoSomething 

    ... do stuff here 

    Application.OnUndo "Undo something", "UnDoSomething" 
End Sub 

Public Sub UnDoSomething 

    ... reverse the action here 

End Sub
+4

Bu, ilk alt eylemleri geri almanıza yardımcı olacaktır, ancak ne yazık ki hala alt çalıştırmadan önce mevcut olan eylemleri geri alma "geçmişini" kaybedersiniz. Eğer herkes bu sorunu nasıl çözeceğini biliyorsa, gerçek bir nimet olurdu. –

+0

@ExcelDevelopers gibi kastediyorum [here] (http://www.jkp-ads.com/Articles/UndoWithVBA00.asp) – Reafidy

3

Makrolarımı çalıştırmadan önce her zaman hemen kaydetmeliyim (en azından test sırasında), her şey armut şeklinde giderse, kaydetmeden çıkıp yeniden açabilirim.

Gerçek makroda pişirirken, bir listedeki tüm değişikliklerin (hücre içeriği, formüller, biçimlendirme ve benzeri) eski halini temel olarak kaydetmeniz ve daha sonra bu listeyi yürüten bir geri alma makrosuna sahip olmanız gerekir. Ters sipariş. Örneğin

makro için "7" "3" Bir hücreyi C22 içeriği değiştirir ve "genel" den "sayısı 2 ondalıklar) biçimlendirme, listeniz olacaktır:

C22 value 3 
C22 format general 

bu Çalma geri (başka makro ile) ters sırada değişiklikleri geri istiyorum

Sen makro tutmak için bir bütün ekstra sayfanız var gibi bilgileri silebilir.

Step Cell Type Value 
---- ---- ----- ------- 
    1 C22 value   3 
     C22 format general 
    2... 

Bu entegre olmaz maalesef 'gerçek' ile çok iyi, ama bunun etrafında bir yol olduğunu düşünmüyorum.

4

Benim düşünce, oldukça basittir. Makro çalışmanızın sonuçlarını beğenmezseniz, kaydedilen çalışma kitabını yukarı çekin. Basit tut, ha?