我需要在我的VBA宏中锁定一些特定的单元格(使其只读)。我是这样做的:
Range(Cells(begin_row, begin_column), Cells(final_row, final_column)).Select
If Selection.Locked = True Then
Selection.Locked = False
End If
ActiveSheet.Protect Contents:=True不过,我有两个问题:
谢谢
发布于 2015-04-05 02:06:51
默认情况下,单元格是被锁定的--这可能会让人感到困惑。首先解锁所有单元格,只选择要锁定的单元格,然后锁定单元格并保护工作表
Cells.Select
Selection.Locked = False
Selection.FormulaHidden = False
Range("A1:D16").Select
Selection.Locked = True
Selection.FormulaHidden = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True发布于 2015-04-05 01:39:47
你当然可以!他们把一切都隐藏得很好,很难找到!
您需要查看与“Content”属性一起的"AllowFormatting*“属性。您可以在Excel::Protection下的对象浏览器中找到完整列表。如果手动的话,每个单选按钮都有一个。
属性将在设置内容的逗号分隔列表中更新。所以你可以用:
ActiveSheet.Protect AllowFormattingColumns:=True, _
AllowFormattingRows:=True, Contents:=True若要检查当前状态,请使用“保护”类和同名属性:
ActiveSheet.Protection.AllowFormattingColumns顺便说一句,如果您的代码不只是被套用:当调用工作簿的一部分来指定您的工作簿/工作表时,这是一个好主意。这是没有必要的,但对一些额外的击键可以避免大量的头痛。我尽我所能做到具体。如果工作表编号将永远不会更改,请按工作表索引指定。如果工作簿名称永远不会更改,我也会指定它。当我打开20个宏时,它会防止我在错误的工作表上运行宏,然后点击F5!您可以更进一步,让MS支持您的选项显式,但这是另一个线程的对话。
您可以将当前工作表声明/设置为顶部的对象,然后在以下过程中使用它:
Dim ws As WorkSheet
set ws = ActiveSheet你的片段变成了
Dim ws As WorkSheet
set ws = ActiveSheet
'Or better yet set ws = ActiveWorkbook.Sheets(1)'<-- Change your sheet here
ws.Range(Cells(begin_row, begin_column), Cells(final_row, final_column)).Select
If Selection.Locked = True Then
Selection.Locked = False
End If
ws.Protect AllowFormattingColumns:=True, _
AllowFormattingRows:=True, Contents:=True祝好运!
https://stackoverflow.com/questions/29452743
复制相似问题