透過工作表保護機制,結合 EnableSelection = xlUnlockedCells,可限制使用者僅能選取/編輯特定未鎖定區域,其餘區域滑鼠無法點選。
完整程式碼
Sub RestrictSelectionArea()
With ActiveSheet
.Unprotect ' 解除現有保護(無密碼)
.Cells.Locked = False ' 先解鎖所有儲存格
.Range("F1:J99").Locked = True ' 僅鎖定 F1:J99 區域
.EnableSelection = xlUnlockedCells ' 僅允許選取未鎖定儲存格
.Protect ' 啟用保護(無密碼)
End With
End Sub
程式碼逐行解析
| 程式碼 |
功能 |
.Unprotect | 移除現有工作表保護(若有密碼需提供) |
.Cells.Locked = False | 將所有儲存格「鎖定」屬性設為 False(預設為 True) |
.Range("F1:J99").Locked = True | 將 F1:J99 區域設為「鎖定」 |
.EnableSelection = xlUnlockedCells | 設定選取模式:僅能選取未鎖定儲存格 |
.Protect | 套用工作表保護,鎖定生效 |
EnableSelection 三種模式
| 常數 |
行為 |
xlNoSelection | 完全禁止選取任何儲存格(含未鎖定) |
xlUnlockedCells | **僅能選取未鎖定儲存格**(本例使用) |
xlNoRestrictions | 預設,可選取所有儲存格(鎖定僅防編輯) |
效果驗證
- 執行巨集後,滑鼠點擊 F1:J99 區域 → 無反應(無法選取、無法編輯)。
- 點擊 F1:J99 以外區域 → 正常選取、編輯。
- 若需編輯 F1:J99,必須先執行
ActiveSheet.Unprotect 解除保護。
進階應用
- 設定密碼保護:
.Protect Password:="secret",解除時需密碼。
- 允許特定動作:
.Protect AllowFormattingCells:=True, AllowInsertingRows:=True 等參數。
- 動態區域:搭配
CurrentRegion 或命名範圍自動判斷鎖定範圍。