![保護某些儲存格的內容而不保護工作表](https://rvso.com/image/1497075/%E4%BF%9D%E8%AD%B7%E6%9F%90%E4%BA%9B%E5%84%B2%E5%AD%98%E6%A0%BC%E7%9A%84%E5%85%A7%E5%AE%B9%E8%80%8C%E4%B8%8D%E4%BF%9D%E8%AD%B7%E5%B7%A5%E4%BD%9C%E8%A1%A8.png)
我們有一個具有多個選項卡的 Excel 2016 工作簿,每個選項卡專用於特定的銷售人員。每個銷售員都從表單登錄,他的(只有他的)工作表已解鎖並允許編輯。
一張表格顯示了他過去的數據。他可以更新或更改表中的大部分資料。他更新特定的儲存格,儲存並關閉工作簿。 wb關閉過程,重新鎖定他的表。在離開之前,他可以查看其他銷售表,但無法編輯,因為它們已被鎖定。
現在擦。在每個銷售人員表上,某些欄位(所有銷售人員都相同)包含管理員輸入的資料。銷售人員必須看到這些數據,但不得更改。
關於如何保護某些欄位免受未受保護的工作表上現有內容變更的任何想法。
答案1
如果不查看 VBA 代碼,很難確定鎖定/解鎖是如何發生的。我認為這是透過設定locked
單元格的屬性並使用工作表保護和取消保護功能來完成的。
您需要做的是選擇所有允許編輯的銷售,並為它們建立自訂範圍。我手邊沒有 Excel,但我相信它是Data
>Define Custom Range
從同一位置您可以選擇一個範圍,這將自動選擇 Excel 中的儲存格。
除了使用自訂範圍之外,您還可以選擇必要的列,前提是管理資料不在同一列上。這將使activesheet.range("K:L").select
成為可能。
在 VBA 代碼中,解鎖工作表後,必須選擇此範圍並變更locked
這些儲存格的設置,然後再次保護工作表。退出時必須執行相反的操作(取消保護、設定全部鎖定、保護)。
若要找出正確的 VBA 程式碼,請在錄製巨集時手動執行操作並複製程式碼。
答案2
LPchip 讓我走上了正確的道路,我非常感謝你。我使用的流程如下:
- 在銷售人員表上,將整個表的鎖定屬性設為 false
- 在該銷售人員的表上,將整個表的鎖定屬性設為 true
- 正如 LPChip 建議的那樣,我們為所有欄位創建了一個自訂範圍,任何人都無法編輯該範圍。手動執行此操作並指派範圍名稱(LockedColumns)。
然後保護該表,這是該表和所有其他銷售表的起始條件。
銷售人員登入並使用正確的憑證,將被帶到他/她的工作表,其中在幕後的 vba 代碼中發生以下操作:
- 我們選擇表並將鎖定屬性設為 false
- 我們選擇 Range.("LockedColumns").select 並將鎖定屬性設為 true
- 我們保護工作表。
這允許授權的銷售員將資料輸入到我們允許的儲存格中,並防止他們更改我們不希望更改的儲存格中的資料。當銷售人員登出或工作簿關閉時,我們在關閉之前捕獲並在 vba 代碼中,1. 再次選擇完整表,將鎖定屬性設為 true,然後保護工作表。我們保存並重定向回下一個用戶的選單選項卡。
我被難住了,LP睜開了眼睛。再次感謝你。