vba добавляет фигуры (звездочки) в зависимости от целого числа ячейки Excel

#vba #integer #ms-office #shapes

#vba #целое #ms-office #фигуры

Вопрос:

У меня есть столбец «I» в электронной таблице, который дает значение от 1 до 5. В зависимости от целого числа / ранжирования более 5 мне удается отображать звезды в ячейке рядом с целым числом:

 Dim x As Integer, Cel As Range, Plg As Range
Dim y As Integer, etoile As Shape
Dim shp As Shape

With mysheet
    Set Plg = .Range("I" amp; startLine amp; ":I" amp; nbLines)

    For Each Cel In Plg
        y = 5
        For x = 1 To Cel.Value
            If Cel > 0 Then
        Set stars= .Shapes.AddShape(msoShape5pointStar, Cel.Left   y, Cel.Top   5, 6, 6)
        y = y   10
        stars.Line.Visible = msoFalse
        stars.Fill.ForeColor.SchemeColor = 13
            End If
        Next x
    Next Cel
End With
  

Но поскольку я использую программу, которая обновляет мой столбец I и целое число, я ищу способ удалить звезды, которые я создал ранее, а затем применил новый рейтинг / количество звезд.

Я пробовал подобные вещи до моего кода:

 For Each shp In mysheet.Shapes
    If shp.Type = msoShapeTypeMixed Then shp.Delete
Next shp
  

Без особого успеха…
Любая помощь была бы оценена!

Ответ №1:

Попробуйте что-то подобное, пожалуйста:

    Dim sh As Worksheet, st As Shape
   Set sh = ActiveSheet
     For Each st In sh.Shapes
        If st.Type = 1 And left(st.Name, 7) = "5-Point" Then st.Delete
     Next
  

Вы также можете присвоить имена звездам при создании.Что-то вроде

 'your existing code
'
Set stars= .Shapes.AddShape(msoShape5pointStar, Cel.Left   y, Cel.Top   5, 6, 6)
       y = y   10
 stars.Name = "MyStar" amp; "somethin else" '(maybe the Cel.Addres and use it in a similar way to delete only specific ones)
'your existing code
  

Затем удалите фигуры, содержащие первые 6 символов, таких как «MyStar», или что вам нравится…

Если вам нужно выборочно удалить их, вы также можете определить их TopLeftCell адрес и удалить в соответствии с этим.

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

1. Да, вы поняли, сэр! Спасибо, что первая сработала отлично

2. @Pierre_CM: Рад, что смог помочь! Но было бы неплохо также изучить остальные предложения. Просто для того, чтобы лучше понимать и изучать VBA … 🙂

3. На самом деле я отлаживал с первым и проверил все свойства объекта (имя адреса). Таким образом, это действительно помогло мне получить очки, которые я пропустил, и вы предложили оба решения!