保护形状,以便用户可以修改但不能删除

问题描述 投票:0回答:2

我有一个工作簿,其中包含一些形状,我不希望用户轻易删除它们。它们与索引链接,索引号与其他一堆东西链接。

但是,用户需要移动形状并调整其大小。

如何在工作表上设置保护,以允许用户修改形状但不能删除它们?

在 VBA 中执行此操作的能力也很有用,因为我的一些宏先取消保护然后再保护单元格。

excel vba shapes spreadsheet-protection
2个回答
0
投票

这是不可能的。

您可以使用此代码锁定工作簿中的所有形状

Private Sub Workbook_Open()
  ActiveSheet.Protect Password:="test", userinterfaceonly:=True
  Dim shape As shape
  For Each shape In ActiveSheet.Shapes
    shape.Locked = True
  Next
End Sub

或者您在 dot.net 中构建 Excel 插件。 该博客描述了如何对形状执行此操作,并且您可以使用事件来覆盖删除。

为形状创建 Excel 事件 或者 Microsoft Excel 形状事件


0
投票

这确实是可能的,但需要一些解决方法。没有 Windows API。然而,你的形状是什么?

  1. 您可以利用 ActiveX 图像控件并通过 left 和 top 属性操作 MouseDown/MouseUp 事件来检测起始位置和结束位置。计算出位置差异后,您可以将图像的新顶部/左侧属性设置为适当的数字。您甚至可以研究图像可能的拖动效果,以便光标在拖动过程中不会显得完全静止。

  2. 或者,您可以打开该工作表的编辑对象保护,以防止固有移动/删除。它仍然允许单击,此时您可以指定一个宏,该宏的反应与解决方案 #1 类似,但更复杂。您的宏可以通过引用“application.caller”属性来读取图片名称。每个图片名称可以有不同的与之关联的过程。读取形状当前的顶部和左侧属性。继续将自动化分为两个步骤。以编程方式取消保护工作表,并使用公共布尔值监视操作正在进行中。使用选择更改事件监视下一次单元格单击,此时您可以捕获后续的顶部和左侧属性,最终计算形状将移动的位置。再次以编程方式保护工作表。

© www.soinside.com 2019 - 2024. All rights reserved.