【发布时间】:2020-10-11 08:26:45
【问题描述】:
我有一个打开工作簿的 VBA 代码。然后它会执行以下操作:
ThisWorkbook.Sheets("Sheet1").Shapes.SelectAll
Selection.Delete
我想在 SelectAll 之后,Selection 应该是刚刚被选中的形状,也就是我要删除的形状。不,这不对。它是刚刚打开的工作簿中的活动单元格,并且是被删除的活动单元格。通常,Select after Select 是指刚刚被选中的对象。显然,在 SelectAll 的情况下,这是不正确的。如何将焦点设置到刚刚选择的形状上?
我通过执行 SelectAll 更改了我的方法,然后按照 Microsoft Docs 中的方法将选定的形状分配给 shaperange 对象。方法如下:
Set myDocument = Worksheets(1)
myDocument.Shapes.SelectAll
Set sr = Selection.ShapeRange
我的代码是:
ThisWorkbook.Sheets("Sheet1").Shapes.SelectAll
Set sr = Selection.ShapeRange
不幸的是,该文档没有说明 sr 的声明内容。我已将其声明为形状、形状、ShapeRange、Object、Variant。在每种情况下,Excel 都会抱怨“对象不支持此属性或方法”。我想知道它在 MS 文档中的设置。
我知道我可以使用 For 循环删除所有形状,但我试图避免执行循环。
【问题讨论】:
-
我对这些行没有任何问题。 selectAll 选择该工作表上的所有形状。它选择所有形状,然后您将其删除。此外,文档确实将 Dim sr 的类型指示为 ShapeRange。见this。检查形状是什么类型,因为我很惊讶当我添加一个三角形和一个正方形并选择然后我需要 Dim sr As DrawingObjects: Set sr = Selection: sr.Delete
-
我有照片和文本框,你的方法有效。谢谢。您提供的链接包含一长串 Excel 对象。我认为这是一个详尽的清单,但没有。 Drawingobjects 未在其中列出。