Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2017, 12:57   #1
perven1
Пользователь
 
Регистрация: 31.12.2016
Сообщений: 15
По умолчанию Обновление объектов на листе - добавленных макросом.

Добрый день. Помогите разобраться со скриптом.
Макрос добавляет картинки на лист. Событие Worksheet Change.

Однако если адрес в ячейке меняется - он просто накладывает одну картинку на другую.
Как заставить макрос - не накладывать объекты друг на друга, а просто обновлять объект ?
Вложения
Тип файла: xls 1-.xls (109.0 Кб, 14 просмотров)
Тип файла: rar foto.rar (42.9 Кб, 6 просмотров)
perven1 вне форума Ответить с цитированием
Старый 14.01.2017, 13:21   #2
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

удалить текущую картинку (если есть), добавить новую.
В процедуру удобно передавать саму ячейку, а не набор параметров
Код:
'код листа

Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Cells.Count > 1 Then Exit Sub
  вставить_фото Target
End Sub

'код модуля

Sub вставить_фото(oneCell As Range)  'для офиса после 2003
Dim s As Shape, a$
  On Error Resume Next
  With oneCell
    If Dir(.Value) <> "" Then 'если файл существует
      a = .Offset(1).Address  'адрес ячейки ниже
                              'ищем фигуру, верхний левый угол которой расположен в ячейке ниже...
      For Each s In .Worksheet.Shapes
        If s.TopLeftCell.Address = a Then s.Delete: Exit For '... и удаляем ее
      Next
      .Worksheet.Shapes.AddPicture _
        Filename:=.Value, _
        linktofile:=msoFalse, _
        savewithdocument:=msoCTrue, _
        Left:=.Left, _
        Top:=.Top + 20, _
        Width:=300, _
        Height:=200
    End If
  End With
End Sub
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 14.01.2017, 16:36   #3
perven1
Пользователь
 
Регистрация: 31.12.2016
Сообщений: 15
По умолчанию

Казанский, все работает. Спасибо.
perven1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Убрать (Border) рамку у ВСЕХ объектов на листе VictorM Microsoft Office Excel 2 19.11.2012 11:18
Обновление значений Имен на листе tae1980 Microsoft Office Excel 5 16.02.2012 21:26
обновление в блоге - Защита объектов в Windows Pblog Обсуждение статей 0 12.12.2010 17:30
Удаление объектов на листе edikamn Microsoft Office Excel 6 06.09.2010 23:08
События для объектов, добавленных скриптом L_M JavaScript, Ajax 4 19.07.2010 14:23