#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