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

如何在不保護Excel中整個工作表的情況下鎖定指定的單元格?

通常,您需要保護整個工作表以防止單元格被編輯。 有什麼方法可以鎖定單元格而不保護整個工作表嗎? 本文為您推荐一種VBA方法。

鎖定指定的單元格,而不用VBA保護整個工作表


鎖定指定的單元格,而不用VBA保護整個工作表

假設您需要鎖定當前工作表中的單元格A3和A5,下面的VBA代碼將幫助您在不保護整個工作表的情況下實現它。

1.右鍵單擊工作表標籤,然後選擇 查看代碼 從右鍵單擊菜單中。

2.然後將下面的VBA代碼複製並粘貼到“代碼”窗口中。 看截圖:

VBA代碼:鎖定指定的單元格而不保護整個工作表

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 1 Then
        If Target.Row = 3 Or Target.Row = 5 Then
            Beep
            Cells(Target.Row, Target.Column).Offset(0, 1).Select
        End If
    End If
End Sub

備註:在代碼中, 列1, 行= 3行= 5 表示運行代碼後,當前工作表中的單元格A3和A5將被鎖定。 您可以根據需要更改它們。

3。 按 其他 + Q 同時關閉按鍵 Microsoft Visual Basic for Applications 窗口。

現在,單元格A3和A5已鎖定在當前工作表中。 如果您嘗試在當前工作表中選擇單元格A3或A5,則光標將自動移動到右側相鄰的單元格。


相關文章:


最佳辦公效率工具

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底部
按評論排序
留言 (22)
還沒有評分。 成為第一位評論!
網站主持人對此評論進行了最小化
我想在 Cell O1 中隱藏公式。 請告知相同的公式。
網站主持人對此評論進行了最小化
親愛的阿傑,
對於單元格的隱藏公式,請按照以下超鏈接獲取解決方案。
https://www.extendoffice.com/documents/excel/1424-excel-hide-formulas.html
網站主持人對此評論進行了最小化
親愛的阿傑,
如果您想在單元格 O1 中隱藏公式而不保護工作表,請嘗試以下 VBA 腳本。
私人子工作表_SelectionChange(ByVal Target As Range)
靜態 TheFormula 作為字符串
如果 Target.Address = "$O$1" 那麼
有目標
公式 = .公式
.Value = .Value
結束
其他
範圍(“O1”)
如果不是 .HasFormula 那麼
.Formula = 公式
如果結束
結束
如果結束
END SUB

使用代碼後,似乎將單元格O1的公式更改為公式結果。 實際上,它通過在公式欄中顯示公式結果來隱藏公式。 如果代碼被破壞,公式將顯示。
網站主持人對此評論進行了最小化
我怎麼能鎖定一系列行,比如 4-46 和第 8 列和第 10 列
網站主持人對此評論進行了最小化
親愛的阿傑,
如果您想鎖定一系列指定的行和列,請嘗試以下 VBA 腳本。

私人子工作表_SelectionChange(ByVal Target As Range)
將 xRg 調暗為範圍
將 xRgEx 調暗為範圍
將 xRgExEach 調暗為範圍
在錯誤恢復下一頁
Application.ScreenUpdating = False
Set xRg = Range("H:J,4:46") '更改您將在不保護工作表的情況下鎖定的行範圍和列範圍
設置 xRgEx = Application.Intersect(xRg, Target)
如果 xRgEx 什麼都不是,則退出 Sub
Cells(1, 1).Select '指定一個單元格,您將在選擇鎖定的單元格後切換到
Application.ScreenUpdating = True
END SUB
網站主持人對此評論進行了最小化
這是一個很好的解決方法,尤其是在不支持打開/關閉保護的共享工作簿中。 非常感謝。
網站主持人對此評論進行了最小化
親愛的水晶,

您為我提供了過去幾週一直在苦苦掙扎的解決方案(其中一半),但我需要更多提示。

這如何僅應用於表格範圍,而不是整個工作表? 提前致謝。
網站主持人對此評論進行了最小化
美好的一天,
由於下面提供的 VBA 代碼,請將指定範圍“H:J,4:46”更改為您只想鎖定在工作表中的表格範圍。
並且單元格(1,1)應該是表格範圍之外的單元格。 單擊表格範圍內的任何單元格時,光標將自動移動到該單元格。

私人子工作表_SelectionChange(ByVal Target As Range)
將 xRg 調暗為範圍
將 xRgEx 調暗為範圍
將 xRgExEach 調暗為範圍
在錯誤恢復下一頁
Application.ScreenUpdating = False
Set xRg = Range("H:J,4:46") '更改您將在不保護工作表的情況下鎖定的行範圍和列範圍
設置 xRgEx = Application.Intersect(xRg, Target)
如果 xRgEx 什麼都不是,則退出 Sub
Cells(1, 1).Select '指定一個單元格,您將在選擇鎖定的單元格後切換到
Application.ScreenUpdating = True
END SUB
網站主持人對此評論進行了最小化
運行 VBA 鎖定這些單元格後,如何解鎖它們?
你必須有VBA代碼才能解鎖嗎?
網站主持人對此評論進行了最小化
嗨雷尼克,

我們不提供解鎖後的VBA代碼,手動破解代碼即可正常編輯區域。
網站主持人對此評論進行了最小化
親愛的水晶,

無論如何,這個宏是否可以在打開文件或單擊任何單元格時自動運行。 我不希望人們必須手動運行宏才能保護所需的範圍。

另外,我需要保護 12 個不相鄰的範圍。 例如:I11:I20 和 K11:K20 和 M11:20 等... 我該怎麼做?

最後,這個可能要求太多了,但是是否可以將保護應用於我上面提供的示例範圍,然後在添加新行時將保護擴展到其他行? 換句話說,保護將應用於 I11:I20 和 K11:K20 和 M11:20,但用戶將能夠使用新數據添加新行(第 21 行),但是一旦添加了新行,則保護將適用於 I11:I21 和 K11:K21 和 M11:21。 我在問月亮嗎? :-)

感謝您已經提供的一切! 我不能感謝你和其他像你一樣的人分享你的知識。 驚人的!
網站主持人對此評論進行了最小化
親愛的卡洛斯,
以下 VBA 代碼可以幫助您解決問題。 請在代碼的第四行填寫您的範圍,然後按 Alt + Q 鍵返回工作表。 然後請切換到其他工作表,然後返回當前工作表以激活代碼。 感謝您的評論。

將 xRg 調暗為範圍
私有子 Worksheet_Activate()
如果 xRg 什麼都不是,那麼
設置 xRg = Union(Range("I10:I20"), Range("K10:K20"), Range("M10:M20"), Range("O10:O20"))
如果結束
END SUB
Private Sub Worksheet_Change(ByVal Target As Range)
將 I 調暗為整數
將 xRgNew 調暗為範圍
將 xRgLCell 調暗為範圍
在錯誤恢復下一頁
Application.EnableEvents = False
對於 I = 1 到 xRg.Areas.Count
設置 xRgLCell = xRg.Areas.Item(I)
設置 xRgLCell = xRgLCell(xRgLCell.Count).Offset(1, 0)
如果 Target.Address = xRgLCell.Address 那麼
如果 xRgNew 什麼都不是,那麼
設置 xRgNew = 目標
其他
設置 xRgNew = Union(xRgNew, 目標)
如果結束
如果結束
下一頁
設置 xRg = Union(xRg, xRgNew)
Application.EnableEvents = True
END SUB
私人子工作表_SelectionChange(ByVal Target As Range)
錯誤轉到 Exitsub
If (Not Intersect(xRg, Target) Is Nothing) And (Target.Count = 1) 然後
Target.Offset(0, 1).選擇
如果結束
退出子:
END SUB
網站主持人對此評論進行了最小化
親愛的水晶,

非常感謝你做的這些! 它完美地工作。

我已使用 Carlos 註釋中的代碼在您打開文件時自動運行宏。 我想知道是否有一種方法可以使用“撤消”按鈕或類似的東西,可以讓您取消該代碼,從而解鎖那些已鎖定的範圍。

我希望它們大部分時間都被鎖定,但如果我需要更改任何數據,我想解鎖它們。 我不保護整個工作表的唯一原因是,如果我這樣做,它會停用在表格上展開的能力。 反過來,展開折線圖。

非常感謝你的幫助!
網站主持人對此評論進行了最小化
嗨,艾琳,
您可以通過單擊 Microsoft Visual Basic for Applications 窗口中的中斷按鈕來手動中斷代碼以解鎖這些範圍。 並運行代碼再次激活它。 謝謝你的評論。
網站主持人對此評論進行了最小化
你好,
評論 faire pour verrouiller de la cellule B8 à B10000?
D'avance merci de votre réponse。
克里斯托夫
網站主持人對此評論進行了最小化
是否有任何功能可以設置例如第 2 行單元格 13 到 900? 還是我需要手動打出代碼中的每個單元格名稱?
網站主持人對此評論進行了最小化
你好,

我使用了提供給 Carlos 的代碼,它完全符合我的要求。 有沒有辦法讓 ROW 內的某些範圍偏移到受保護範圍的右側(正如“Carlos”代碼已經做的那樣),但在 COLUMN 內有其他範圍偏移到受保護範圍正下方的單元格? 我嘗試兩次輸入“Carlos”代碼並更改偏移量,但收到了各種錯誤。

謝謝
網站主持人對此評論進行了最小化
嗨查理,
抱歉還不能幫你。 感謝您的評論。
網站主持人對此評論進行了最小化
嗨,

我已嘗試將代碼用於您之前發布的範圍,但它不起作用 - 您能否建議我是否應該將代碼組合用於高於或低於範圍的代碼?


謝謝
網站主持人對此評論進行了最小化
我試過不能,隱藏公式而不保護。
網站主持人對此評論進行了最小化
每次有人打開文件時,有沒有辦法讓這個 VBA 代碼自動運行?
網站主持人對此評論進行了最小化
嗨 Aaron,添加代碼後,請將工作簿另存為 Excel 啟用宏的工作簿(單擊 文件 > 另存為 > 為文件指定一個文件夾 > 選擇 Excel啟用宏的工作簿 來自 除上文所 類型下拉列表 > 節省)。 之後,每次打開文件時,代碼都會自動運行。
這裡還沒有評論
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

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