保护Excel VBA中的特定形状和图像

时间:2017-12-23 08:52:12

标签: excel excel-vba vba

我有一张包含一些宏的Excel表格。另外,我的工作表上有一些导航形状和图像。我想要这张表的用户,不能改变这些形状和图像的位置,不能选择它们,也不能移动它们。

有没有办法保护某些特定物品?

问候。

1 个答案:

答案 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上发现并测试。