2015-02-11 84 views
2

我想在我的Excel工作表上創建一個安全的時間戳。我正在使用的VBA會自動添加當前用戶的用戶名,時間和用戶將信息放入列A的日期。因此,如果用戶將某些內容放入單元格A1中,則B1會自動填充其用戶名,並且C1會被填充與時間和日期。唯一的問題是這種方法不安全,因爲用戶可以在自動填充信息後更改信息。我想將代碼添加到此VBA中,以便在信息填充後鎖定所有三個單元。安全時間戳 - VBA

我打算使用保護表功能,並且只允許用戶「選擇解鎖的單元格」因此,如果VBA可以自動鎖定單元格,那麼用戶將無法更改信息。

而且我已經使用Me.Unprotect改變細胞和Me.Protect後仍之前它不工作

任何幫助,將不勝感激!

+0

嗨,我需要在給定範圍內的數據輸入後鎖定每個單元格。就像我一次輸入Y或N一樣。不能再編輯它。以下是我的代碼 – 3689 2015-02-23 12:27:32

回答

1

假設我們開始與工作表解鎖和片材密碼保護,密碼中的所有單元格:

6LgSdHjc2uOssv0e1LDI

以下事件宏將:

  1. 取消保護工作簿
  2. 檢測條目塔A
  3. 地方在列的用戶名和在列中的日期/時間戳ç
  4. 鎖定在列中的條目A,B,C
  5. 重新保護工作表。

這正好工作表中的代碼區:

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim A As Range, MyPass As String, sh As Worksheet 
    Dim unit As Range 
    Set A = Range("A:A") 
    MyPass = "6LgSdHjc2uOssv0e1LDI" 
    Set sh = ActiveSheet 
    If Intersect(Target, A) Is Nothing Then Exit Sub 

    Set unit = Union(Target, Target.Offset(0, 1), Target.Offset(0, 2)) 

    Application.EnableEvents = False 
    sh.Unprotect (MyPass) 
    unit.Locked = False 
     Target.Offset(0, 1) = Environ("Username") 
     Target.Offset(0, 2) = Now() 
    unit.Locked = True 
    sh.Protect (MyPass) 
    Application.EnableEvents = True 
End Sub 

因爲它是工作表的代碼,它是非常容易安裝和自動使用:

  1. 右鍵單擊該選項卡名稱靠近Excel窗口的底部
  2. 選擇查看代碼 - 這將彈出一個VBE窗口
  3. 粘貼東西並關閉VBE窗口

如果您有任何疑慮,請先在試用工作表上嘗試。

如果保存工作簿,宏將與其一起保存。 如果您正在使用一個版本的Excel更高然後2003,你必須 將文件保存爲.XLSM而不是。XLSX

要刪除宏:

  1. 彈出VBE窗口如上
  2. 清晰的代碼進行
  3. 關閉VBE窗口

要了解更多關於宏一般,參見:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

要了解更多有關事件宏(工作表的代碼),請參閱:

http://www.mvps.org/dmcritchie/excel/event.htm

宏必須爲此工作啓用!

+0

謝謝!有效。我根據需要對數據選擇進行了一些更改。非常感謝您的支持。 – 3689 2015-02-12 07:52:37

+0

感謝您的反饋 – 2015-02-12 11:56:39