2014-04-22 37 views
1

我只寫了一小段VBA代碼,它只是在按下按鈕時刪除表單中的三列。如何撤消通過VBA執行的操作

按下按鈕時,列將被刪除。這部分工作正常。我想要做的是通過Excel中的STOCK撤消按鈕使此操作可逆。目前,刪除這些行無法以任何方式撤銷(我知道這一點),這意味着如果按鈕被意外按下,則表單必須退出並重新打開。

這是我目前的代碼,請隨時批評它,我不是很熟悉VBA的最佳實踐,雖然我正在學習。

Private Sub CommandButton1_Click() 
Dim Alias_Adds As Worksheet 
Set Alias_Adds = Sheets("Alias_Adds") 

MSG1 = MsgBox("Are you ready to delete the validation columns? (A, F, and G?)", vbYesNo, "") 

If MSG1 = vbYes Then 
With Alias_Adds 
     Alias_Adds.Columns("A").EntireColumn.Delete 'this is the line that is cauing the error 
     Alias_Adds.Columns("E:F").EntireColumn.Delete 
    End With 
Else 
    MsgBox "Ok, let's wait a bit to delete those columns" 
End If 

End Sub 
+0

可能的重複:http://stackoverflow.com/questions/20673696/how-to-undo-cancel-all-what-macros-did-by-cancel-button –

+2

我不相信這是重複的。鏈接的問題想要使用額外的VBA按鈕來取消他的第一個VBA按鈕執行的操作。我希望我的VBA動作可以通過Excel的股票UNDO按鈕來逆轉。 – FluffyKittens

+1

@me我怎麼 - 我讀過你發佈的鏈接,我發現它非常有幫助。 – FluffyKittens

回答

0

因爲Excel VBA不支持通用撤銷自己的行動,必須構建安全功能,爲你的邏輯。

而不是簡單地刪除列,首先將它們複製到一個未使用的位置。這些數據隨後可用於檢索。

+0

因此,絕對沒有辦法通過股票撤銷按鈕使我的VBA操作可逆?如果不是,那麼您應該在哪裏建議保存數據(從最佳實踐的角度來看),我是否應該使用VBA將它包含在3個獨立的數組中(或者甚至可以),或者將它保存爲隱藏工作簿並在每次按下按鈕時覆蓋它? – FluffyKittens

+0

您的選擇.........使用隱藏工作表或使用同一工作表中的列或使用內部VBA陣列 –

+0

好吧,我想我可以通過保存到另一個工作表來破解它,但僅僅爲了傾向,你能告訴我一些使用數組的代碼嗎?在內部通過VBA執行此操作的速度要比其他方法慢 – FluffyKittens