excel vba:select最近创build的形状

我有一张纸,人们必须用笔和平板电脑签字。 在Excel中,我们正在使用“开始着墨”来进行这个过程。 我想select,resize,并完成后移动签名。 我用macroslogging,并想出如何resize和移动,但显然,我只能select所有的形状或select一个形状,我知道它的名字(墨水17),我不知道。 我给了它一些想法,并意识到也许我通过select最新创build的形状来解决它。 此外,签名可能包含一条或多条曲线,这意味着我必须记住先前的曲线,并select其余的(第二个或第三个人签名时)。 我相信有办法做到这一点,但是我花了几个小时没有运气。

谁能帮忙?

最简单的方法是,让他们签署没有其他形状的地方。 假设他们有范围M11:Q31 。 这个子将是所有形状的高度和宽度的一半,左上angular的单元格在这个范围内(具有从N11开始的“背景”不会受到影响)。

 Sub kjhdrle() Dim x As Variant, y As String y = "" For Each x In ActiveSheet.Shapes If Not Intersect(x.TopLeftCell, [M11:Q31]) Is Nothing Then If y = "" Then y = x.Name Else y = y & vbLf & x.Name End If End If Next If y = "" Then Exit Sub ActiveSheet.Shapes.Range(Split(y, vbLf)).Select If InStr(y, vbLf) Then Selection.ShapeRange.Group.Select Selection.ShapeRange.ScaleWidth 0.5, msoFalse, msoScaleFromTopLeft Selection.ShapeRange.ScaleHeight 0.5, msoFalse, msoScaleFromTopLeft End Sub 

我保持尽可能简单。 如果不止一个项目,它也将分组的项目,所以当resize时,锚点也将缩放。 (没有,每个元素会缩小自己的锚点)。

一个不同的方式,将是一个自动重命名的形状,你不想被处理…有一些像名称前面的“not_me_”。 然后,在运行代码时,只需忽略以该string开头的形状。 经过处理后,sub所使用的形状被重命名为"not_me_" & [shape].name ,所以下次将被忽略;)

如果你还有什么问题,就问。