我有一张包含一些宏的Excel表格。另外,我的工作表上有一些导航形状和图像。我想要这张表的用户,不能改变这些形状和图像的位置,不能选择它们,也不能移动它们。
有没有办法保护某些特定物品?
问候。
答案 0 :(得分:0)
我相信,自从将Shapes添加到MS Excel以来,这是一个古老的问题,而我本人也一直在寻找答案。 我仅在三天前就独自发现了如何锁定MS Excel Freeform形状(例如Choropleth Map形状),使其不被移动,重新格式化或最坏的删除,删除,而无需锁定WorkSheet或最终锁定WorkBook。 而且我认为我必须与世界分享我的发现,因为每个人都想锁定自己的形状!
步骤:(我主要使用Excel VBA和msoFreeform形状,但我认为任何形状都可以使用,并且通过Excel UI手动添加的形状也应适用于其他Office Apps)
1.(yourWorkSheet或)ActiveSheet.Shapes.AddChart(通过VBA,但可以通过Excel UI添加图表,然后删除唯一的图表) (不需要任何其他参数,因为我们只需要图表容器“ ChartObject”)
2。如果还没有图形,请通过Excel UI或VBA使用AddShape方法或BuildFreeform在Chart上或直接在工作表上创建形状。
3。将创建的形状(如果通过Excel UI或通过工作表上的VBA创建/复制/粘贴)到BLANK图表容器中。 (请勿拖放)
4。通过VBA或Excel UI根据需要设置ChartContainer矩形窗口的格式(尝试“无填充无轮廓”)
5。关于图表保护,有3个选项 (此处嵌入图表是因为我不使用图表表,也许这可能与它们一起使用) 来源:[https://peltiertech.com/Excel/ChartsHowTo/ChartProtection.html] 但是这里只显示相关的2个:
5(a)ActiveChart.ProtectFormatting = True
该保护将通过“图表工具菜单”或“绘图工具-格式菜单”阻止形状和图表上的任何格式更改,或者使用鼠标移动或调整大小或删除BUT将在通过鼠标选择时显示ChartContainer窗口,但无法通过选择VBA
例如。 yourworksheet.ChartObjects("YourChartName").Chart.ProtectFormatting=True
5(b)ActiveChart.ProtectSelection = True
这将完全阻止形状或图表的选择,所以这就是故事的结尾
例如。 yourworksheet.ChartObjects("YourChartName").Chart.ProtectSelection=True
这种方法最好的是,形状仍然可以通过VBA进行访问,例如
例如yourworksheet.ChartObjects("YourChartName").Chart.Shapes("YourShapeName or Index").whatever
除了Shape.Select应该很明显,根本不需要锁定工作表或工作簿。
NB:1)有趣的发现是这2个保护不会彼此取代(如果一个接一个地应用),而是更像是相互堆叠,这意味着如果两个(如果您确实想要的话)都先设置为True,然后再设置为True设置为“ False”后,其他限制仍然保留。
2)即使选择受到上述保护,仍然可以通过选择窗格访问该图表,因此:
Application.CommandBars("Selection and Visibility").Enabled = False
并建议阻止工作表导出,但出于完整性考虑,我认为这些都是过大的。
已在MS Excel 2010和YMMV上发现并测试。