Поиск фигуры по имени с помощью подстановочного знака

#excel #vba

#excel #vba

Вопрос:

У меня есть коробка, в которой стоит цифра 1:
введите описание изображения здесь

Поскольку я буду автоматически добавлять новый лист, я хотел бы, чтобы это число увеличилось на 1.

 Sub otdr()
    
    Dim i As Long, j As Long, Lastrow As Long
    Dim xNumber As Long, yNumber As Long
    Dim otdr As Range, desc As Range, fet As Range, boxdesc As Range
    Dim xName As String
    Dim ws As Worksheet, wk As Worksheet
    Dim shp As Shape
    
    Application.ScreenUpdating = False
    
    Set ws = Sheets("OTDR TRACE - 1")
    Set wk = Sheets("Fibre drop release sheet")
    Set fet = wk.Range("E3")
    Set otdr = ws.Range("Q46")
    Set desc = ws.Range("B52")
    Set boxdesc = ws.Range("B60")
    xNumber = Sheets("Frontsheet").Range("D32").Value
    
    Lastrow = wk.Cells(wk.Rows.Count, "E").End(xlUp).Row
    
    For i = 1 To (xNumber - 1)
         otdr = "OT " amp; (i   1) amp; " of " amp; Number
         desc = fet.offset(1, 1)
         ws.Copy After:=ActiveWorkbook.Sheets(ws.Index   i - 1)
         ActiveSheet.Range("B60").Value = i   1
         ActiveSheet.Name = "OTDR TRACE - " amp; i   1
      
         For Each shp In ActiveSheet.Shapes
             If shp Like "Rectangle" Then
                 shp.TextFrame2.TextRange.Characters.Text = boxdesc
             End If
         Next shp
    Next
    
    ws.Activate
    otdr = "OT 1 of " amp; Number
    
    Application.ScreenUpdating = True
    
End Sub
 

Я получаю сообщение об ошибке:

«Объект не поддерживает это свойство или метод»

с помощью отладчика, указывающего на следующую строку:

 If shp Like "Rectangle" Then
 

Как я могу скопировать прямоугольник на только что скопированный лист с увеличенным номером?

like Оператор является подстановочным знаком в VBA Excel. Имя моего прямоугольника изначально «Прямоугольник 1». На новом листе он будет изменен на «Прямоугольник 2». Тогда что не так с этим подстановочным знаком?

Ответ №1:

Вы не можете сравнить объект (a Shape Object ) со строкой…

Затем, чтобы заставить Like оператора работать, вы должны использовать подстановочный знак следующим образом:

 If shp.Nme Like "Rectangle*" Then
 

Или используйте Instr следующим образом:

 If InStr(1, shp.Name, "rectangle", vbTextCompare) > 0 Then
 

Эта последняя версия также не чувствительна к регистру…