Note: The other languages of the website are Google-translated. Back to English

如何在Excel中基於日期保護單元格?

通常,我們可以保護工作表以防止其他人編輯或修改單元格值,但是有時您需要根據日期保護單元格。 例如,我要保護其他單元格,但只允許修改今​​天日期的單元格值,如下面的屏幕截圖所示,本文將討論如何基於日期保護單元格。

doc按日期保護1

使用VBA代碼保護除今天日期行以外的所有行

使用VBA代碼保護日期過去的所有行


箭頭藍色右氣泡 使用VBA代碼保護除今天日期行以外的所有行

僅允許修改等於今天的日期的行,以下代碼可以為您提供幫助,請按以下步驟操作:

1。 右鍵單擊要基於日期保護單元格的工作表選項卡,然後選擇 查看代碼 從上下文菜單中,彈出 Microsoft Visual Basic for Applications 窗口,請將以下代碼複製並粘貼到空白模塊中:

VBA代碼:保護除今天的日期行以外的所有行:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Updateby Extendoffice 20161025
    If Range("E" & Selection.Row).Value <> Date Then
        ActiveSheet.Protect Password:="111111"
        MsgBox "Only today's date row can be edited!", vbInformation, "Kutools for Excel"
    ElseIf Range("E" & Selection.Row).Value = Date Then
        ActiveSheet.Unprotect Password:="111111"
        ActiveSheet.EnableSelection = xlNoRestrictions
    End If
End Sub

doc按日期保護2

備註:在上面的代碼中,字母 E 是日期所在的列標題,“111111”是保護此工作表的密碼。 您可以根據需要更改它們。

2。 然後保存並關閉此代碼窗口。

(1.)如果單擊今天日期行以外的其他單元格,則會彈出提示框,提醒您無法編輯該單元格,請參見屏幕截圖:

doc按日期保護3

(2.)如果單擊並編輯等於今天的日期的行,它將被成功修改,請參見屏幕截圖:

doc按日期保護4


箭頭藍色右氣泡 使用VBA代碼保護日期過去的所有行

如果您需要保護日期已過的所有行,僅允許修改今​​天和將來的日期行,請應用以下VBA代碼:

1。 右鍵單擊要基於日期保護單元格的工作表選項卡,然後選擇 查看代碼 從上下文菜單中,彈出 Microsoft Visual Basic for Applications 窗口,請將以下代碼複製並粘貼到空白模塊中:

VBA代碼:保護所有行的日期已過:

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Updateby Extendoffice 20161025
  Dim xRow As Long
  xRow = 2
  ThisWorkbook.ActiveSheet.Unprotect Password:="111111"
  ThisWorkbook.ActiveSheet.Cells.Locked = False
  Do Until IsEmpty(Cells(xRow, 5))
    If Cells(xRow, 5) < Date Then
      Rows(xRow).Locked = True
    End If
    xRow = xRow + 1
  Loop
  ThisWorkbook.ActiveSheet.Protect Password:="111111"
End Sub

doc按日期保護5

備註:在上面的代碼中,數字 5 是日期所在的列號,“111111”是保護此工作表的密碼。 您可以根據需要更改它們。

3。 然後保存並關閉此代碼窗口。

(1.)如果單擊單元格日期已過,則會彈出一個提示框,提醒您無法編輯該單元格,請參見屏幕截圖:

doc按日期保護6

(2.)如果單擊行的單元格嘗試更改今天或將來日期中的值,則將成功修改它,請參見屏幕截圖:

doc按日期保護7


最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (30)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
漏洞:其他人可以通過使用“查看代碼”選項看到密碼。
網站主持人對此評論進行了最小化
無法正常工作,因為所有單元格都顯示消息但可編輯
網站主持人對此評論進行了最小化
嗨,是否可以按列正上方的日期鎖定列?
網站主持人對此評論進行了最小化
私人子工作表_Change(ByVal Target As Range)

'訂閱 http://youtube.com/excel10tutorial

'通過捐贈來支持頻道 http://patreon.com/excel10tutorial

暗色作為範圍

'在此處設置正確的工作表名稱:

With ThisWorkbook.Sheets("AGOSTO-22")

.取消保護“ABCDE”

對於 .UsedRange.Columns 中的每個列

col.EntireColumn.Locked = col.Range("A1").Value <> 日期

下一欄

.保護“ABCDE”

.EnableSelection = xlNoRestrictions

結束

END SUB
網站主持人對此評論進行了最小化
嗨,是否可以根據列中直接位於它們上方的日期鎖定某些單元格?
網站主持人對此評論進行了最小化
嗨,盧西斯,
你能更具體地給出你的問題嗎? 或者您可以附上屏幕截圖作為您的問題。
感謝您!
網站主持人對此評論進行了最小化
你好天陽

是的,這是一個屏幕截圖。 希望這可以幫助。
網站主持人對此評論進行了最小化
在這裡。
查看附件 (1 / 5)
網站主持人對此評論進行了最小化
你好,盧西斯,
您的意思是鎖定過去日期的列,並且只能修改今天和未來幾天的列嗎?
查看附件 (1 / 5)
網站主持人對此評論進行了最小化
正確的! 我該怎麼做呢?
網站主持人對此評論進行了最小化
嗨,路易斯,
A1中的日期單元格怎麼樣? 是手動輸入還是用公式 =now() 輸入的? 如果是公式單元格,則鎖定的列將隨著日期的變化而變化。
期待你的答复!
網站主持人對此評論進行了最小化
嗨天陽

是的,單元格 A1 具有 =now() 公式。

謝謝!
網站主持人對此評論進行了最小化
你好.....


我正在使用代碼來保護除今天的日期行之外的所有行............



私人子工作表_SelectionChange(ByVal Target As Range)
'更新通過 Extendoffice 20161025
If Range("A" & Selection.Row).Value <> Date Then
ActiveSheet.Protect 密碼:="111111"
MsgBox "只能編輯今天的日期行!", vbInformation, "Kutools for Excel"
ElseIf Range("E" & Selection.Row).Value = Date Then
ActiveSheet.Unprotect 密碼:="111111"
ActiveSheet.EnableSelection = xlNoRestrictions
如果結束
END SUB


在我保存並單擊單元格後,我收到消息,只有今天的日期行可以編輯....但是如果我雙擊單元格,我可以編輯...請幫助
網站主持人對此評論進行了最小化
這很好用。 但是如何切換它以根據第 3 行中的日期解鎖列?
網站主持人對此評論進行了最小化
作為對 VBA 比較陌生的人,您介意解釋一下為什麼第 2 行中的 xRow = 4 嗎?



謝謝
網站主持人對此評論進行了最小化
因為在第沒有。 1 你有標題
網站主持人對此評論進行了最小化
嗨,

運行此代碼時出現錯誤,如圖所示
我還附上了我想要更改的excel的快照..

你能在我的代碼中指導我應該根據我的excel文件在哪裡進行更改,以便可以編輯只包含今天和未來日期的單元格嗎???
查看附件 (2 / 5)
網站主持人對此評論進行了最小化
你好,卡蘭,
因為您的表格中有合併單元格,所以上述代碼無法在合併單元格表格中正確應用。
如果您還有其他好的想法,請在此處發表評論。 謝謝!
網站主持人對此評論進行了最小化
您好,我嘗試做同樣的事情,但通過將“Selection.Row”替換為“Selection.Columns”和“E”替換為“5”(日期所在的行號),用 VBA 代碼保護除今天的日期列之外的所有列,但是我不斷收到錯誤 1004!

請幫忙嗎?

謝謝
網站主持人對此評論進行了最小化
您好,我嘗試做同樣的事情,但通過將“Selection.Row”替換為“Selection.Columns”和“E”替換為“5”(日期所在的行號),用 VBA 代碼保護除今天的日期列之外的所有列,但是我不斷收到錯誤 1004!

請幫忙嗎?

謝謝
網站主持人對此評論進行了最小化
你好,
將此代碼應用於您需要的列,請使用以下 VBA 代碼:(注意:在代碼中,5 是包含日期的行號,請根據需要更改。)

私人子工作表_SelectionChange(ByVal Target As Range)
將 xRg 調暗為範圍
設置 xRg = Target.Worksheet.Cells(5, Target.Column)
如果 xRg <> 日期 那麼
ActiveSheet.Protect 密碼:="111111"
MsgBox "只能編輯今天的日期行!", vbInformation, "Kutools for Excel"
ElseIf xRg.Value = 日期然後
ActiveSheet.Unprotect 密碼:="111111"
ActiveSheet.EnableSelection = xlNoRestrictions
如果結束
END SUB

請嘗試,希望對您有所幫助!
網站主持人對此評論進行了最小化
謝謝! 抱歉,我直到現在才收到您的回复,可能是我的電子郵件有問題。

有效! 不能說謝謝! 我非常感謝!
網站主持人對此評論進行了最小化
嗨,
很高興它可以幫助你!
網站主持人對此評論進行了最小化
嗨,

我正在嘗試擴展它以保護不包括本月或/和本週的列。 我試圖用“月”或“週”替換“日期”,但沒有奏效。

我附上了一個週表樣本,用戶不能在本週以外的列中編輯或輸入。

對此有何建議? 還是我應該使用實際日期來反映一個月中的一天?
網站主持人對此評論進行了最小化
感謝您的幫助,非常感謝您的朋友,這是一個很大的幫助。 解決了我的緊張情緒。
是安全的
問候羅希特·卡納
網站主持人對此評論進行了最小化
嗨我面臨一個問題,一旦我關閉文件並在同一日期再次打開它,代碼就不起作用。 請幫助我卡住
網站主持人對此評論進行了最小化
嗨,羅希特,
為了保留代碼,您應該將您的工作簿保存為 Excel 啟用宏的工作簿格式,請嘗試,謝謝!
網站主持人對此評論進行了最小化
你好,我做到了,但是當我按下單元格消息時顯示它無法編輯,但是當我按下鍵盤時,我仍然可以在單元格中寫入
網站主持人對此評論進行了最小化
您好,我想保護未來的日子,並允許編輯當前和過去的日子。 我怎麼做?
網站主持人對此評論進行了最小化
你好,米格爾,為了保護未來的日子,請應用以下代碼: Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'更新通過 Extendoffice
將 xRow 變暗
x行 = 2
ThisWorkbook.ActiveSheet.Unprotect Password:="111111"
ThisWorkbook.ActiveSheet.Cells.Locked = False
做直到 IsEmpty(Cells(xRow, 5))
If Cells(xRow, 5) > Date Then
行(xRow).Locked = True
如果結束
x行 = x行 + 1
循環
ThisWorkbook.ActiveSheet.Protect 密碼:="111111"
完子請試一試,希望能幫到你!
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護