Фигуры автоматически меняют свои имена

#excel #vba #debugging #shapes

#excel #vba #отладка #фигуры

Вопрос:

Я использовал «Макрос записи», чтобы найти имена фигур в VBA

Сначала он показал имя фигуры как «Отрезать диагональный угловой прямоугольник 11«. Но через несколько дней я не могу запустить макрос, связанный с этой фигурой, и он уведомил меня о том, что «Элемент с определенным именем не найден«. Когда я снова перепроверил его имя с помощью «Макроса записи», имя было изменено на «Прямоугольник: диагональные углы обрезаны 11«.

Меня совершенно смущает функция «Запись макроса», независимо от того, имеет ли она каждый раз разные способы вызова имен фигур или это каким-то образом результат какой-либо ошибки, вызванной операторами.

Если у кого-нибудь есть какие-либо идеи по этому поводу, пожалуйста, объясните мне. Спасибо!

Комментарии:

1. Было бы лучше опубликовать ваш код. Но я сомневаюсь, что вы получите ответ, потому что нет способа воссоздать проблему. Удачи!

2. Почему имя имеет значение? Вы должны либо установить его в переменную объекта, либо использовать его AutoShapeType свойство msoShapeSnip2DiagRectangle , чтобы найти его.

Ответ №1:

Я попытался создать его несколькими разными способами, и, как сказал @TinMan, я не могу его воспроизвести. На мой взгляд, почему это имеет значение? Если вам нужно управлять им, сохраните его как переменную или выполните поиск позже, выполнив поиск по его AutoShapeType свойству

 Dim Rectangle As Shape
Set Rectangle = ActiveSheet.Shapes.AddShape(msoShapeSnip2DiagRectangle, 582, 144.75, 72, 72)
With Rectangle
    .TextFrame2.TextRange.Text = "Hello"
End With
  

Или найдите его позже, выполнив поиск по всем фигурам (измените Sheet1 на правильный лист)

 For Each Rectangle In Sheet1.Shapes
    With Rectangle
        If .Type = msoAutoShape Then
            If .AutoShapeType = msoShapeSnip2DiagRectangle Then
                'Do something...
            End If
        End If
    End With
Next
  

Ответ №2:

Спасибо всем, кто помогает. Я размещаю свой код здесь, если вы хотите перепроверить его и воспроизвести ошибку. На самом деле, я пытаюсь показывать и скрывать некоторые фигуры всякий раз, когда нажимаются некоторые кнопки. Дело в том, что этим фигурам назначены макросы, поэтому мне нужно вызывать их снова и снова.

Code1: Частный подраздел EditInformation_Click()

 Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual

Sheet5.Unprotect

Sheet5.Cells(2, "C").Locked = False
Sheet5.Range("D2:G2").Locked = False
Sheet5.Range("C8:J115").Locked = False

Sheet5.Shapes.Range(Array("Rectangle 43")).Width = 318.24
Sheet5.Shapes.Range(Array("Snip Diagonal Corner Rectangle 11")).Visible = False
Sheet5.Shapes.Range(Array("Snip Diagonal Corner Rectangle 14")).Visible = True
Sheet5.Shapes.Range(Array("Snip Diagonal Corner Rectangle 15")).Visible = True
Sheet5.Cells(2, "C").Value = ""
Sheet5.Cells(2, "D").Value = ""
Sheet5.Range("C8:J115").Value = ""
Sheet5.Cells(3, "O").Value = "Edit mode"

Application.Calculation = xlCalculationAutomatic

Call CommandButton1_Click

Application.ScreenUpdating = True
  

End Sub

Код 2: Sub DiscardButon()

 Sheet5.Unprotect
Sheet5.Shapes.Range(Array("Rectangle 43")).Width = 166.32
Sheet5.Shapes.Range(Array("Snip Diagonal Corner Rectangle 11")).Visible = True
Sheet5.Shapes.Range(Array("Snip Diagonal Corner Rectangle 14")).Visible = False
Sheet5.Shapes.Range(Array("Snip Diagonal Corner Rectangle 15")).Visible = False
Sheet5.Range("C2:G2").Value = ""
Sheet5.Range("C8:J115").Value = ""
Sheet5.Cells(3, "O").Value = ""
Sheet5.Protect
  

End Sub