Удалить Картинку Из Ячейки

#vba #excel-tables

Вопрос:

У меня есть файл excel, содержащий более 1000 изображений. Изображения вставляются в столбец J каждой строки. У меня есть форма пользователя, которая позволяет пользователю обновлять изображение. Что я хочу, так это удалить изображение, которое присутствует в ячейке, прежде чем обновлять новое изображение. Код, который я нашел и попытался использовать:

 Dim curPic As Shape
  For Each curPic In Worksheets("Sheet1").Shapes
    If Not Application.Intersect(curPic.TopLeftCell, PicCell) Is Nothing Then
        curPic.Delete
    End If
  Next curPic
 

Дело в том, что у меня есть фотография 1000 , она проверяет каждую фотографию, и я получаю «Не отвечает» на файл.
Есть ли способ поиска только в определенной ячейке, так как я знаю местоположение ячейки.

Ответ №1:

Предположение: верхний левый угол фигуры находится в определенной ячейке.

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

Что отличается от вашего кода: я сравниваю адреса диапазонов и не пересекаю диапазоны. Я предполагаю, что это будет быстрее, но еще не проверял это.

Кроме того, цикл «для следующего» завершается, как только форма найдена. Это означает, что процедура будет выполняться быстрее для первых ячеек в вашем столбце, но медленнее для последних ячеек.

 Option Explicit

Sub deleteShapeInRange(rgCell As Range)

Dim shp As Shape

For Each shp In ActiveSheet.Shapes
    If shp.TopLeftCell.Address = rgCell.Address Then
        shp.Delete
        exit for
    End If
Next

End Sub