excel vba:选择最近创建的形状

xxhby3vn  于 2023-03-13  发布在  其他
关注(0)|答案(2)|浏览(126)

我有一个工作表,人们必须使用钢笔和平板电脑签名。在Excel上,我们正在使用“开始墨迹”进行这个过程。我想在完成后选择,调整大小和移动签名。我使用宏记录,并弄清楚了如何调整大小和移动,但显然我只能选择所有形状或选择一个我知道其名称的形状(墨水17)我不知道。我想了想,意识到也许我可以通过选择最新创建的形状来绕过它。另外,签名可能包含一条或多条曲线,这意味着我必须记住前面的曲线并选择其余的曲线(当第二个或第三个人签名时)。我确信有办法做到这一点,但我在过去的几个小时里没有任何运气。
有人能帮忙吗?

luaexgnf

luaexgnf1#

最简单的方法是,让他们在没有其他形状的地方签名。让我们假设他们的范围是M11:Q31。这个sub将是该范围内左上角单元格所有形状的高度和宽度的一半(具有从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

我保持的是尽可能简单。它也会分组的项目,如果超过一个,所以当调整大小,锚也将规模。(没有,每个元素将缩小自己的锚)。
另一种方法是自动重命名你不想被处理的形状...在名字前面加上类似“not_me_”的字符串。然后在运行代码时,简单地忽略以该字符串开头的形状。处理后,被sub使用的形状被重命名为"not_me_" & [shape].name,这样下次它们就会被忽略;)
如果你还有什么问题,尽管问。

rqenqsqc

rqenqsqc2#

我沿着这个问题是因为我有一个类似的要求。现在对我有效的是:通过比较创建前后图纸上的形状数量,可以获得最新的形状。

Sub Get_latest_Shape()

Dim lngCount As Long

    'Save the sheets current amount of shapes before adding a new one.
    lngCount = ActiveSheet.Shapes.Count

    'Add a shape.
    >> your shape-adding code here <<
    
    'Address the latest shape by calling the old shape count +1.
    MsgBox (ActiveSheet.Shapes(lngCount + 1).Name)
    
End Sub

相关问题