#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