首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel允许您只锁定单元格的内容,而不是单元格本身吗?

问Excel允许您只锁定单元格的内容,而不是单元格本身吗?
EN

Stack Overflow用户
提问于 2015-04-05 00:04:58
回答 2查看 250关注 0票数 0

我需要在我的VBA宏中锁定一些特定的单元格(使其只读)。我是这样做的:

代码语言:javascript
复制
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

不过,我有两个问题:

  1. 看起来,虽然范围中的行(begin_row、final_row)被正确锁定,但该行范围中的列不仅锁定在范围内(begin_column、final_column),而且还锁定在其他任何地方。这是奇怪和不想要的,因为用户可能希望从冻结的列中向右放置一些数据或注释。
  2. 列标题可能很长,用户可能希望展开列,但是他无法这样做,因为它是锁定的。所以,我想知道:是否有可能只锁定细胞的内容,而使细胞本身可以扩展?或者,如果这是不可能的,如何在VBA或C#中设置单元格宽度(数据实际上是从C#代码输出的)?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2015-04-05 02:06:51

默认情况下,单元格是被锁定的--这可能会让人感到困惑。首先解锁所有单元格,只选择要锁定的单元格,然后锁定单元格并保护工作表

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2015-04-05 01:39:47

你当然可以!他们把一切都隐藏得很好,很难找到!

您需要查看与“Content”属性一起的"AllowFormatting*“属性。您可以在Excel::Protection下的对象浏览器中找到完整列表。如果手动的话,每个单选按钮都有一个。

属性将在设置内容的逗号分隔列表中更新。所以你可以用:

代码语言:javascript
复制
ActiveSheet.Protect AllowFormattingColumns:=True, _
AllowFormattingRows:=True, Contents:=True

若要检查当前状态,请使用“保护”类和同名属性:

代码语言:javascript
复制
ActiveSheet.Protection.AllowFormattingColumns

顺便说一句,如果您的代码不只是被套用:当调用工作簿的一部分来指定您的工作簿/工作表时,这是一个好主意。这是没有必要的,但对一些额外的击键可以避免大量的头痛。我尽我所能做到具体。如果工作表编号将永远不会更改,请按工作表索引指定。如果工作簿名称永远不会更改,我也会指定它。当我打开20个宏时,它会防止我在错误的工作表上运行宏,然后点击F5!您可以更进一步,让MS支持您的选项显式,但这是另一个线程的对话。

您可以将当前工作表声明/设置为顶部的对象,然后在以下过程中使用它:

代码语言:javascript
复制
Dim ws As WorkSheet
set ws = ActiveSheet

你的片段变成了

代码语言:javascript
复制
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

祝好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29452743

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档