Прежде всего, у вас есть цикл for всего с 3 итерациями, и у вас есть переключатель для трех !!. почему вы не можете переместить свой общий код в новую функцию и вызывать ее трижды?
Более того, каждая ошибка имеет уникальный номер (в случае ошибок VBA, таких как Subscript вне диапазона и т. Д., Или описание, если это общий номер, такой как 1004, и других служебных ошибок). Вам нужно проверить номер ошибки, а затем решить, как поступить, если пропустить деталь или обойти ее.
Пожалуйста, пройдите через этот код ... Я переместил ваш comon-код в новую функцию, и в этой функции мы будем изменять размеры формы.
Если фигура отсутствует, мы просто вернем false и перейдем к следующей фигуре.
'i am assuming you have defined drnme, nme as strings and d1 as integer
'if not please do so
Dim drnme As String, nme As String, d1 As Integer
dl = 20
drnme = kt + " 90"
nme = "door90"
If ResizeShape(drnme, nme, d1) Then
d1 = d1 + 160
End If
'Just call
'ResizeShape(drnme, nme, d1)
'd1 = d1 + 160
'If you don't care if the shape exists or not to increase d1
'in that case whether the function returns true or false d1 will be increased
drnme = kt + " dec"
nme = "door70" 'decorative glazed'
If ResizeShape(drnme, nme, d1) Then
d1 = d1 + 160
End If
drnme = kt + " gl"
nme = "door80" 'plain glazed'
If ResizeShape(drnme, nme, d1) Then
d1 = d1 + 160
End If
ActiveSheet.Shapes("Txtdoors").Select
Selection.Characters.Text = kt & ": " & kttxt
Worksheets("kts close").Protect Password:="UPS"
End Sub
'resizes the shape passed in.
'if the shape does not exists then returns false.
'in that case you can skip incrementing d1 by 160
Public Function ResizeShape(drnme As String, nme As String, d1 As Integer) As Integer
On Error GoTo ErrorHandler
Dim sh As Shape
Set sh = Worksheets("kitchen doors").Shapes(drnme)
sh.Copy
ActiveSheet.Paste
Selection.ShapeRange.Name = nme
Selection.ShapeRange.Top = 50
Selection.ShapeRange.Left = dl
Selection.ShapeRange.Width = 150
Selection.ShapeRange.Height = 220
Exit Function
ErrorHandler:
'Err -2147024809 will be raised if the shape does not exists
'then just return false
'for the other errors you can examine the number and go back to next line or the same line
'by using Resume Next or Resume
'not GOTO!!
If Err.Number = -2147024809 Or Err.Description = "The item with the specified name wasn't found." Then
ResizeShape = False
Exit Function
End If
End Function