我想共享一个包含切片器和图表的 excel 文件。我希望用户能够使用切片器进行筛选,然后选择并复制图表。但我想保护工作表并防止对图表和切片器进行任何编辑。
据我所知,选项是锁定图表和切片器,在这种情况下,当工作表受到保护时,它们不可编辑,但切片器会冻结,图表无法复制(PrintScreen 不是一种选项)。或者,解锁它们,在这种情况下它们变得可用但可编辑。
有办法解决这个问题吗?
答案1
您有两个选择。一种方法是使用启用 VBA 的工作表并使用 VBA 添加您自己的逻辑,但这要求您的工作表启用宏,xlsm
并且最终用户必须在您的工作簿中启用宏 - 但这样您可以最好地控制允许用户的操作。第二种方法是xlsx
不使用 VBA - 但您不能在那里拒绝用户执行某些操作,例如删除切片器或更改图表名称。
1)你可以这样做正如这里推荐的:
Private Sub Chart1_Click()
ActiveSheet.ChartObjects(1).CopyPicture
MsgBox ("Chart copied to clipboard. You can now paste this into another application.")
End Sub
这意味着您需要将工作簿转换为 xlsm,即带有宏的工作簿。然后添加一个宏来处理图表单击时的剪贴板操作。
2)我认为更好的方法是将受保护的工作表上的图表元素保持解锁状态,然后使用宏修改其属性:
Sub macro()
ActiveChart.ProtectData = True
ActiveChart.ProtectFormatting = True
ActiveChart.ProtectSelection = False
End Sub
或者针对工作表上的所有图表:
For Each i In ActiveSheet.ChartObjects
i.Chart.ProtectSelection = False
i.Chart.ProtectData = True
i.Chart.ProtectFormatting = True
Next i
这样,您在创建工作簿时使用宏,但工作簿本身不包含 VBA。
如果为图表创建单独的工作表,则可以使用密码单独保护它:
Sub macro()
Dim newChart As Chart
Range("C9:C11").Select
Set newChart = ActiveChart
With newChart
.Protect Password:="pwd", DrawingObjects:=True, Contents:=True
.ProtectData = True
.ProtectFormatting = True
.ProtectSelection = False
.ChartObjects(1).Chart.ProtectSelection = False
'setting other properties
End With
End Sub
至于切片器,您需要将其保持解锁状态,并在锁定工作表时检查“使用数据透视表报告”。
答案2
编辑是指仅仅编辑底层数据还是编辑图表本身的样式?
如果您只想锁定数据,则可以将数据放在受保护的工作表上(您还可以允许使用数据透视表、选择、排序等),并将图表放在另一张工作表上。
这里他们建议使用一个点击即可复制图表的宏,如果包含图表的工作表也受到保护,您可以使用它。
答案3
尝试启用只读模式。我相信这是 Excel 上的一项功能(与受保护的视图不同),但我可能错了。