2014-05-06 97 views
0

是否有可能爲worksheet_change不處理通過退出子掛起/已經發生了用戶的更新應該在條件得不到滿足?我有一個日誌記錄系統,並且不希望用戶一次刪除多個單元格,因爲我的代碼每次處理一個單元格更新 - 最終應該改進代碼以允許這樣做。但與此同時:VBA的Excel Worksheet_Change防止更新

Private Sub Worksheet_Change(ByVal Target As Excel.Range) 

If Selection.Count > 1 Then 
    MsgBox ("please delete items one at a time") 
    Exit Sub 
End If 

這顯示MSGBOX OK,但在選擇的所有單元格的內容刪除收益,應多個小區選擇。被刪除的內容然後被記錄系統遺漏。

好,試圖讓「最終目的地」響應@加里的學生回答,因爲它是不是真的非法刪除多個單元格。

部分使用@binil的解決方案讓我這個僞代碼,但我不夠好,完成它(在範圍內,細胞可以是不連續的)

Dim theoldvals As Variant 

Private Sub Worksheet_Change(ByVal Target As Range) 
Dim i As Integer 

for each c in the oldvals 
Sheets("log").ActiveCell.Value = "OLD value" = oldvals(c) 
     .ActiveCell.Offset(1, 0) = "NEW value" = Target(c) ' where c is the corresponding cell/index in the target range 
Next c 

End Sub 


Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
Set theoldvals = Target 
End Sub 

回答

0

你可以有另一片(設定Visible = xlSheetVeryHidden所以用戶不能只是顯示它通過定期取消隱藏進程),這是您的工作表的副本即可。然後,無論您何時參加Worksheet_Change活動,都可以檢查您的驗證條件。如果您的條件達不到你從你的克隆表搶了舊值,如果通過驗證,那麼你寫信給你普通片狀正常重複該寫信給你的克隆片。

0

你無法阻止的東西它已經發生之後。但是:

If Selection.Count > 1 Then 
    MsgBox ("please delete items one at a time") 
    ActiveWorkbook.Saved = True 
    ActiveWorkbook.Close 
End If 

將防止非法更改被保存。

+0

然後集中你的努力,在得到了「死神」。 –