有没有办法保护工作表,使某些单元格可写(例如,用户可以在这些单元格中输入数字),但格式和注释框无法更改?我可以创建一个受保护的工作表,其中只有某些单元格是解锁的。但是,如果我将另一个工作表(具有不同的格式和自己的注释框)中的单元格复制/粘贴到这些单元格中,格式和注释将被覆盖。
该解决方案最好在 Excel 2010 中运行,但针对较新版本的特定解决方案对我来说也很感兴趣。
答案1
在这种情况下,我发现我需要给出否定的答案:如果没有 VBA 宏,您要求的功能就不可能实现。如果您有兴趣采用这种方式,下面是一段简单的代码,它将尝试执行正常的 Excel 粘贴,并在出现错误时尝试从剪贴板打印。
Public Sub PasteasValue()
On Error GoTo errhand
If ActiveWorkbook Is ThisWorkbook Then
Selection.PasteSpecial Paste:=xlPasteValues
End If
If Not ActiveWorkbook Is ThisWorkbook Then
Selection.Paste
End If
Exit Sub
errhand:
If ActiveWorkbook Is ThisWorkbook Then
ActiveCell.PasteSpecial xlPasteAll
End If
If Not ActiveWorkbook Is ThisWorkbook Then
ActiveCell.PasteSpecial xlPasteAll
End If
End Sub
我的答案是基于十多年来 Excel 用户一直要求该功能,但一直没有解决方案。
作为证据,我在下面列出了在 Microsoft 的 Excel User Voice 网站上发现的众多建议中的一些,这些建议总是被忽略:
- 更改 Excel 的粘贴默认行为
- 停止复制粘贴覆盖数据验证
- 需要能够仅允许在受保护的 Excel 中粘贴值,而无需使用宏或 vba
- 添加一个选项来更改“粘贴”的默认值,以便它可以是“公式”或“值”
- 粘贴为文本
- 选择指定默认粘贴到目标格式
- 将“粘贴并合并条件格式”设为默认粘贴行为
有一些最新证据表明(截至 2020 年 12 月)Excel 开发团队可能终于开始倾听但十多年过去了,人们仍旧只能猜测。
您会在评论中找到对某些用户有用的各种解决方法,但它们都需要用户进行一些约束,或者使用 VBA 宏来修改 Excel 工作表的行为。
答案2
首先,按照您想要的方式格式化单元格或范围,并添加您喜欢的任何注释。
第二,右键单击用于用户输入的单元格==>>“格式化单元格”==>>“保护”选项卡==>>取消选中“锁定”
第三,“审阅选项卡==>>保护工作表”,确保更改单元格、列、行格式以及编辑对象和编辑场景的选项都未选中。如果您希望用户能够在可以输入数据的单元格之间使用 TAB,那么您可能还需要取消选中“选择锁定单元格”,这样当他们使用 TAB 时,这些位置对他们来说就显而易见了。
编辑:有人指出格式仍然可以复制到少数未锁定的单元格中。
因此你这样做:使工作表看起来像你想要的那样. 解锁您希望用户输入数据的特定单元格,并保护工作表。 复制工作表。 在第二份副本中,用户输入通常会进入的单元格指的是第一个工作表中相应的未锁定的单元格。 现在锁定第二张工作表上的每个单元格。
用户可以以任何奇怪的方式格式化第一个工作表上未锁定的单元格 A1,但锁定的第二张工作表上匹配的单元格 A1 将只包含第一个工作表的“=Sheet1!A1”的值,没有格式或注释。
用户可以滥用第一个工作表,从 Nyancat 风格的网页复制粘贴,但是您的第二张工作表将以您选择的任何格式显示这些值。 用户可能仍会输入错误数据,或类似 SQL 注入的内容,但至少如果用户足够值得信任,只输入数据文本和值数字,您的问题就应该可以解决。