Excel VBA根据形状的位置选择形状
如果单元格中的值Excel VBA根据形状的位置选择形状,excel,vba,shapes,Excel,Vba,Shapes,如果单元格中的值“A:Shape.TopLeftCell.Row”=0,如何选择所有形状(数组?范围?)? 如上图所示,阵列应仅包含形状2和3。构建符合条件的形状栏,然后选择该形状栏 Sub ShapePicker() Dim s As Shape, sr As ShapeRange Dim Arr() As Variant Set mycell = Range("A:A").Find(What:=0, After:=Range("A1")) rrow = my
“A:Shape.TopLeftCell.Row”=0,如何选择所有形状(数组?范围?)?
如上图所示,阵列应仅包含形状2和3。构建符合条件的形状栏,然后选择该形状栏
Sub ShapePicker()
Dim s As Shape, sr As ShapeRange
Dim Arr() As Variant
Set mycell = Range("A:A").Find(What:=0, After:=Range("A1"))
rrow = mycell.Row
i = 1
For Each s In ActiveSheet.Shapes
If s.TopLeftCell.Row = rrow Then
ReDim Preserve Arr(1 To i)
Arr(i) = s.Name
i = i + 1
End If
Next s
Set sr = ActiveSheet.Shapes.Range(Arr)
sr.Select
End Sub
另一种选择是,您可以反转逻辑,边走边选择,然后根据需要将选择指定给形状标注:
Sub ShapePicker()
Dim s As Shape
Dim sr As ShapeRange
Dim i As Long
i = 1
For Each s In ActiveSheet.Shapes
If Cells(s.TopLeftCell.Row, "A").Value = 0 Then
s.Select (i = 1)
i = i + 1
End If
Next s
Set sr = Selection.ShapeRange
End Sub
可以在图纸上的形状之间循环,直到找到范围内的形状。正如其他人提到的,选择通常是不必要的
Dim shp As shape
For Each shp In ActiveSheet.shapes
If Not Intersect(yourselectedrange, shp.TopLeftCell) Is Nothing Then
shp.Select
Exit For
End If
Next shp
还有另一种方法。我在寻找解决方案时偶然发现了这篇文章
因此,这是一个为任何人寻找出路
方法如下:
像这样运行一次循环
,将矩形的名称
更改为它们的TopLeftCell的地址
Dim sh As Shape
For Each sh In ActiveSheet.Shapes
sh.Name = sh.TopLeftCell.Address
Next sh
现在,在任何其他代码中,您可以使用以下命令直接访问形状:
ActiveSheet.Shapes(ActiveCell.Address).Select
这是实现它的一种方法。虽然目前还没有一种方法,你正在寻找
您可以更改ActiveCell.Address
任何范围对象,也可以仅更改文本本身。它将采用$D$4
经过尝试和测试,它工作顺利。您实际想要完成什么?我这样问是因为很少需要在Excel中选择或激活任何内容。而且,这没有任何意义:“A:Shape.TopLeftCell.Row”=0
。当然没有。这是为了显示我需要的形状,它们的左上角在一行中,列中的值为0。选择我的意思是放入数组,然后我将对所有形状执行一些更改。那么到目前为止你试过什么?您可以创建一个函数,返回一个形状名称数组。这正是我所需要的。塔克斯