2016-02-25 2 views
0

Я заметил, что мой рабочий лист замедлялся вниз, и, по некоторым причинам, было создано несколько объектов. Я побежал следующий макрос, чтобы удалить их все:VBA delete all shapes error

Dim Shp as Shape 
For Each Shp In Worksheets("Sheet1").Shapes 
    Shp.Delete 
Next Shp 

Однако я получаю The index into the specified collection is out of bounds ошибку. Таким образом, я сделал следующее, чтобы увидеть, сколько объектов было создано:

Dim i As Long 
i = ActiveSheet.Shapes.Count 
MsgBox CLng(i) 

И получил номер 41152. Я пробовал Go To Special и выбранные объекты, но если это число правильно мой компьютер сбой пытается выбрать более 41K объекты сразу.

Любые предложения по их удалению?

+1

Любопытно, что у вас есть '41152' формы на листе! а также, что первый бит кода выходит из строя. Что произойдет, если вы попытаетесь сделать шаг назад через фигуры (например: «Для x = i до 0 Шаг -1: Таблицы (« Лист1 »). Формы (x). Удалить: Next') –

+0

Получает ту же ошибку и так , Интересно, не справится ли это с удалением этого сразу. Есть ли способ ограничить его до 1000 или около того? Будем счастливо управлять им 40 раз, если он избавится от них! –

+0

Попробуйте 'Activesheet.DrawingObjects.Delete'? – Rory

ответ

1

Вы можете сделать шаг назад через коллекцию Shapes, чтобы удалить их из последнего значения в коллекции Index.

Как это:

i = Worksheets("Sheet1").Shapes.Count 
For x = i To 1 Step -1: Worksheets("Sheet1").Shapes(x).Delete: Next