gpt4 book ai didi

vba - 有没有更快的方法在 Excel 中删除形状

转载 作者:行者123 更新时间:2023-12-04 21:54:20 24 4
gpt4 key购买 nike

我已成功地将形状添加到数据透视表的单元格 (msoShapeOval) 中。如果枢轴/切片器选择发生变化,我需要清除并重新创建这些形状。我目前的方法有效,但速度很慢。有没有更好的方法来批量清除形状?注意:我确实知道所有这些形状存在的确切单元格范围。我也申请了:

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False

当前代码:
  Dim Shp as Shape
For Each Shp In rng.Parent.Shapes
If InStrB(Shp.Name, "$") > 0 Then Shp.Delete
Next

最佳答案

可以在不选择的情况下立即删除形状,并进行一些微调。假设您想从中删除矩形:

enter image description here

您需要执行以下操作:

  • 遍历所有对象
  • 用所有矩形名称创建一个数组
  • 删除数组中的对象

  • 棘手的部分是对象的循环,因为您需要每次都增加数组,这不是内置功能(如在集合中)。 incrementArray是这个功能。

    此外,第一次递增到未分配的数组时,您需要检查它是否已分配(通过下面的 IsArrayAllocated 函数实现)。
    Option Explicit

    Sub TestMe()

    Dim shp As Shape
    Dim arrOfShapes() As Variant 'the () are important!

    With ActiveSheet
    For Each shp In .Shapes
    If InStrB(shp.Name, "Rec") > 0 Then
    arrOfShapes = incrementArray(arrOfShapes, shp.Name)
    End If
    Next
    If IsArrayAllocated(arrOfShapes) Then
    Debug.Print .Shapes.Range(arrOfShapes(0)).Name
    .Shapes.Range(arrOfShapes).Delete
    End If
    End With
    End Sub

    附加功能:
    Public Function incrementArray(arrOfShapes As Variant, nameOfShape As String) As Variant

    Dim cnt As Long
    Dim arrNew As Variant

    If IsArrayAllocated(arrOfShapes) Then
    ReDim arrNew(UBound(arrOfShapes) + 1)
    For cnt = LBound(arrOfShapes) To UBound(arrOfShapes)
    arrNew(cnt) = CStr(arrOfShapes(cnt))
    Next cnt
    arrNew(UBound(arrOfShapes) + 1) = CStr(nameOfShape)
    Else
    arrNew = Array(nameOfShape)
    End If

    incrementArray = arrNew

    End Function

    Function IsArrayAllocated(Arr As Variant) As Boolean
    On Error Resume Next
    IsArrayAllocated = IsArray(Arr) And _
    Not IsError(LBound(Arr, 1)) And _
    LBound(Arr, 1) <= UBound(Arr, 1)

    End Function

    this guy发现 arrOfShapes应该用括号声明(我花了大约 30 分钟研究为什么我不能正确传递它)和 CPearson对于 IsArrayAllocated() .

    关于vba - 有没有更快的方法在 Excel 中删除形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47693336/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com