Страницы: 1
RSS
Как удалить картинки на листе - только с прозрачным фоном (PNG)
 
Добрый день!
На листе есть несколько картинок,
часть из них с прозрачным фоном (изначально вставлялись как картинки с  форматом PNG),
часть из них с обычным фоном  (изначально вставлялись как картинки с форматом JPG)
Возможно ли удалить с листа только картинки с прозрачным фоном, так чтобы картинки с обычным фоном остались?
Прикрепил файл пример, с картинками на листе.
 
в файле у обеих картинок заливки нет.
разница - в наличии линий (рамочки).
попробуйте так (на копии!!!)
Код
Sub t()
  For Each sh In ActiveSheet.Shapes
    If sh.Line.Visible = msoFalse Then sh.Delete
  Next
End Sub 
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
ikki пишет: разница - в наличии линий (рамочки).
Линии может и не быть (Формат рисунка => Цвет линии => Нет линий).
There is no knowledge that is not power
 
ikki,Спасибо за быстрый ответ, код удаления по линии работает.
А можно ли применить этот код только к рисункам?
На листе помимо рисунков будут вставлены графики через инструмент камера - они тоже будут без обводок, и стало быть удаляться ...
Как я понимаю, в самой ексель, такого деления на файлы - как PNG и JPG,  нету?
 
PS: на втором рисунке фон есть - он белый, а на первом он прозрачный
 
Я попробовал этот код, но он мне выдал, что все две картинки имеют прозрачный бэкграунд:
Код
Sub F()
    Dim sh As Shape
    For Each sh In Лист1.Shapes
        MsgBox sh.PictureFormat.TransparentBackground '-1 = msoTrue
    Next
End Sub
There is no knowledge that is not power
 
Johny, Может быть ошибка в коде?
Я пробовал вставлять другие картинки, (сканированные в JPG) - они точно не прозрачные, ваш код все равно показывает "-1"
вставляю картинки через: Вставка\Рисунок\выбрать\ОК
Ексель х64 2010
 
Цитата
Johny пишет: все две картинки имеют прозрачный бэкграунд
это и через интерфейс видно: Формат рисунка - Заливка (Нет заливки)
Цитата
Dmitriywu пишет:деления на файлы - как PNG и JPG,нету?
наверное, нет.
Цитата
Dmitriywu пишет: На листе помимо рисунков будут вставлены графики
надо будет поискать различия. по отличительным признакам проверять.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
У графиков иной тип фигуры(shape.Type) = 3. А у картинок этот тип равен 13.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дим,
Цитата
Dmitriywu пишет: ...через инструмент камера
и эти тоже 3?
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
А если я задам для прозрачного рисунка свое имя, например "прозрачный" ,
на листе будет несколько рисунков с одним именем - вроде такое возможно,
как мне удалить с листа все рисунки с именем "прозрачный"?
 
Цитата
ikki пишет:
и эти тоже 3?
Нет, конечно. Это же объект рисунок, со ссылкой на определенный диапазон. Притом именно на диапазон, внутри которого может быть и сводная таблица, и графики и все, что угодно. Узнать график ли внутри можно лишь считав координаты ссылки и по координатам(адресам ячеек) в листе, снимок с которого сделан, определить попадает ли внутрь координат диаграмма.

Dmitriywu, что-то не припомню, чтобы на одном листе можно было давать одинаковые имена объектам. Может имелось ввиду что-то типа: "прозрачный_1, прозрачный_2" и т.д.?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist, я скопировать форму с именем прозрачный_1, то ее копия тоже  с именем прозрачный_1
или это глюк какой-то?
Изменено: Dmitriywu - 16.09.2014 12:58:27
 
Подскажите как на писать код со следующей логикой:
do will  если форма на листе имеет имя "прозрачный"
           удалить форму
           loop
 
Выложите-ка пример, где имя прозрачный у двух объектов...Может надпись внутри объекта "прозрачный", а имя-то разное? Вы где имя смотрите?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Выкладываю файл с одинаковыми именами, смотрю прямо над ячейкой А1 белое окошко
 
Все спасибо разобрался сам   :D  
Код
Sub t3()
  For Each sh In ActiveSheet.Shapes
    If sh.Name = "прозрачный" Then sh.Delete
  Next
End Sub
 
можно использовать то, что для картинок, вставленных с помощью инструмента камера, заполнено свойство DrawingObject.Formula
т.е. в код из #2 добавляем ещё одно условие:
Код
Sub t()
  For Each sh In ActiveSheet.Shapes
    If sh.Line.Visible = msoFalse And sh.DrawingObject.Formula = "" Then sh.Delete
  Next
End Sub
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
Цитата
Dmitriywu пишет: If sh.Name = "прозрачный" Then sh.Delete
Это что же получается - сначала все нужные привести к одному имени, а потом их удалять макросом? ))
===
А вообще странно - одинаковые имена... И как обратиться к нужному в этом случае?
 
ikki, Александр спасибо за помощь!!!  
 
Цитата
Юрий М пишет: А вообще странно - одинаковые имена... И как обратиться к нужному в этом случае?
сталкивался. Можно специально задать одинаковое имя, по крайней мере, в VBA. Также имя может сохраниться при копировании (был тут вопрос с сортировкой диаграмм для вывода их в Ворд в соответствии с положением на листе. И там на одном из листов 40 диаграмм имели одинаковое имя "Диаграмма 1" ;)
Обращаться приходится по индексу.
F1 творит чудеса
 
там что-то другое, емнип...
в частности, для второго рисунка в исх.файле в поле имен Excel пишет "Рисунок 2"
а в свойствах объекта в VBA я вижу, что Name у этого объекта - "Picture 2"
причём без ошибок отрабатывают обе команды
Код
Set sh = ActiveSheet.Shapes("Рисунок 2")
Set sh = ActiveSheet.Shapes("Picture 2")

но вот значения "Рисунок 2" я в свойствах не нашел...
Изменено: ikki - 16.09.2014 14:33:41
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
Страницы: 1
Наверх