用工作表事件輕鬆記錄工作表修改情況

用工作表事件輕鬆記錄工作表修改情況

在日常工作中,對於一些表格,我們希望看到表格內容的修改情況,特別是需要多人填寫的表格,通過修改情況我們可以發現表格修改過程中的錯誤。

這種需求如何實現呢?

用VBA,其實很簡單。

1. 思路介紹

我們仔細梳理一下,我們把它歸納為兩步

(1)當鼠標選中時,記錄單元格中的原內容。

(2)當單元格中的內容發生改變時,對比原內容和新內容,如果原內容和新內容不同,那麼就記錄下來。否則,不記錄。

這樣,我們需要用到工作表中的兩個事件代碼,利用工作表的Worksheet_SelectionChange,當選中單元格時觸發該事件,記錄原內容;利用Worksheet_Change,當單元格內容發生改變時觸發該事件,比較新內容和原內容。

流程圖如下:

用工作表事件輕鬆記錄工作表修改情況

2. 構建工作表

(1)新建工作表,名稱:“員工信息表”,代碼名稱為:sheet1

我們的目的就是記錄此表的修改情況。

用工作表事件輕鬆記錄工作表修改情況

(2)新建工作表,名稱:“修改記錄”,代碼名稱為:sheet2

我們需要將“員工信息表”的修改情況,記錄在此表中。

用工作表事件輕鬆記錄工作表修改情況

3. 代碼

(1)定義一個變量在當前模塊內使用公共變量changes

<code>

Private

changes

As

String/<code>

Changes變量儲存單元格內的原內容

(2)當鼠標選中單元格時,將單元格中的內容儲存在changes

<code>

Private

Sub Worksheet_SelectionChange(ByVal Target

As

Range)     changes = Target.Value End Sub/<code>

(3)當單元格時內容改變時,將修改的情況儲存在“修改記錄”工作表中

<code>

Private

Sub Worksheet_Change(ByVal Target

As

Range)     Dim rng

As

Range     

If

Sheet1.Range(

"j2"

) <>

""

Then    

'判斷用戶是否為空         If Target.Value <> changes Then '

判斷單元格內容是否變化             Set rng = Sheet2.Range(

"a"

& Rows.Count).End(xlUp)             rng.Offset(

1

,

0

) = rng.Row

'根據行號計算序號             rng.Offset(1, 1) = Format(Now, "yyyy-m-d hh:mm") '

寫入時間             rng.Offset(

1

,

2

) = Sheet1.Range(

"j2"

)   

'操作用戶             rng.Offset(1, 3) = Sheet1.Name  '

工作表名稱             rng.Offset(

1

,

4

) = Target.Address   

'寫入單元格地址             rng.Offset(1, 5) = changes  '

寫入單元格原值             rng.Offset(

1

,

6

) = Target.Value     

'寫入修改後的值                      End If     Else         MsgBox "請選擇用戶"     End If End Sub

/<code>

說明:

代碼中首先對用戶名進行判斷,如果用戶名為空,則要求選擇用戶。當選擇用戶後,如果內容改變則把修改的情況一一寫入“修改記錄”相應單元格中。如下圖

用工作表事件輕鬆記錄工作表修改情況

這樣,我們可以把修改情況清楚的記錄在工作表中,對錶格的修改情況一目瞭然,可以發現表格修改過程中的錯誤。

另外,大家如果有興趣,可以利用這個修改情況表格,進行回退操作,一步一步回退之前的操作。


分享到:


相關文章: