如何用vba有条件的全选所有excel图形对象?

 

在excel中可以通过定位对话框,一次性选中工作表中的所有图形对象。

 

 

在excel vba中,可以使用Range对象的SpecialCells方法实现上述定位的部分操作。

 

但是非常可惜的是,无法用Range对象的SpecialCells方法定位对象。

 

如果我们用录制宏的方式,录制出来的代码是这样的:

 

Sub 宏3()
ActiveSheet.DrawingObjects.Select
End Sub

 

如果我们把DrawingObjects放到F2【对象浏览器】中去查找,会发现,压根没有这个对象存在。

 

 

因为DrawingObjects对象已经是被废弃的对象,微软刻意隐藏它了,在以后的版本中是否继续支持不得而知。

 

但是上述的录制宏代码确实可以一次性选中工作表中的所有图形对象。

 

现在问题来了:有这么个场景,你有很多图形在工作表中,你需要用vba一次性选中部分图形对象,不是全部。然后将这些图形对象用vba批量复制粘贴到PPT中,应该怎么写代码呢?

 

这里介绍一个对象ShapeRange对象,它表示由任意个图形对象组成的图形集合对象。当我们需要对部分图形统一操作时,只需构造ShapeRange对象即可。

 

比如上述的场景可以使用如下的代码来实现:

 

Sub 水星Excel()
    '作者QQ:1722187970,微信:xycgenius,微信公众号水星excel
    Dim oSP As Shape
    Dim oWK As Worksheet
    Set oWK = Excel.ActiveSheet
    Dim arr()
    With oWK
        For Each oSP In .Shapes
            '只选择所有文本框对象
            If oSP.Type = msoTextBox Then
                ReDim Preserve arr(k)
                arr(k) = oSP.Name
                k = k + 1
            End If
        Next
        '构造ShapeRange对象
        .Shapes.Range(arr).Select
    End With
End Sub
       

发表评论