Страницы: 1 2 След.
RSS
Вставка картинки в диапазон ячеек
 
Здравствуйте, сколько не гуглил подобную тему - повсюду встречается обратный вариант.
А мне необходимо вставить картинку в заданный диапазон ячеек, автоматически подогнав ее размер, игнорируя пропорции.
Как это осуществить?
 
Если надо вставить одну картинку:
http://excelvba.ru/code/PastePictures

Если надо автоматизировать процесс вставки большого числа картинок:
http://excelvba.ru/programmes/PastePictures
 
В обоих случая рассказывается, как вписать картинку в одну ячейку, а мне нужно именно в диапазон
 
ESTerekhov, в коде есть комментарии
код
 
Цитата
Karataev написал: .ShapeRange
Большое спасибо, работает без ошибок! Только я указал диапазон С1:Х23 а картинка вставляется в Т1:АС23. Отчего такой сдвиг?
 
ESTerekhov, выложите на форуме полностью код, который вы используете и который дает неправильный результат.
Изменено: Karataev - 20.08.2015 09:14:03
 
Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Set rng = Range("D1:X23")
 
tip = Worksheets(1).Cells(28, 5)
For zz = 2 To 50
    If tip = Worksheets(2).Cells(zz, 1) Then
    f = Worksheets(2).Cells(zz, 2)
GoTo nashel
                End If
            Next zz
nashel:
ActiveSheet.Pictures.Delete ' это я удаляю ранее вставленные картинки
Set shp = ActiveSheet.Pictures.Insert("D:\slep\" & f & ".png").ShapeRange
shp.LockAspectRatio = False
      
    shp.Left = rng.Left
    shp.Top = rng.Top
      
    shp.Height = rng.Height
    shp.Width = rng.Width
Изменено: ESTerekhov - 20.08.2015 10:21:11
 
ESTerekhov, макрос начинается Sub и заканчивается End Sub. Выложите полностью макрос, который вы используете.
 
Там просто небольшие расчеты идут
Скрытый текст
Изменено: ESTerekhov - 20.08.2015 10:39:13
 
ESTerekhov, сделайте лучше по-другому. Сделайте новый макрос, оставив в нем только то, что связано с картинкой. Запустите этот макрос и убедитесь, что он неправильно работает, и выложите этот макрос на форуме. Чтобы в коде не было того, что не относится к данной теме.
 
Убрал все - все равно вставляет картинку не в том диапазоне. Конечный диапазон оказывается как бы сдвинутым на 17 столбцов
Код
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Option Explicit
 
Sub расчет()
 
Dim zz As Integer, f As String, tip As String
Dim rng As Range, shp As ShapeRange
 
Set rng = Range("D1:X23")
 
tip = Worksheets(1).Cells(28, 5)
For zz = 2 To 50
    If tip = Worksheets(2).Cells(zz, 1) Then
    f = Worksheets(2).Cells(zz, 2)
GoTo nashel
                End If
            Next zz
nashel:
ActiveSheet.Pictures.Delete
Set shp = ActiveSheet.Pictures.Insert("D:\slep\" & f & ".png").ShapeRange
shp.LockAspectRatio = False
      
    shp.Left = rng.Left
    shp.Top = rng.Top
      
    shp.Height = rng.Height
    shp.Width = rng.Width
End Sub
 
ESTerekhov, у меня не получается воссоздать вашу проблему. Не могу помочь. Нужно, наверное, посмотреть файл и сам рисунок.
 
Приложил файлы, код на втором листе модуля, к нему привязана кнопка "Рассчитать".
На втором листе список и названия картинок. Мне нужно сделать так, чтобы при изменении ячейки E28 автоматически вставлялась соответствующая картинка в область С1:Х23.
Картинки не получилось приложить - слишком большой объем. Нужно на локальном диске D создать папку Slep и туда поместить картинку, для того чтобы все работало, назовите ее kupec или посмотрите в соответствии со списком на втором листе.
 
Извечные грабли на одном и том же...
Это "Set rng = Range("D1:X23")", по-Вашему, на каком листе диапазон, если Вы код в модуль листа засунули?
 
ESTerekhov, нашел причину ошибки. Оказывается, если код находится в модуле листа и не указывать лист, то подразумевается не активный лист, а лист, в котором находится код.
Явно указывайте в коде лист:
код
 
Влад, а во встроенной справке написано об этой особенности? Я в справке нашел только такое:
When used without an object qualifier, this property is a shortcut for ActiveSheet.Range (it returns a range from the active sheet; if the active sheet isn’t a worksheet, the property fails).
 
Спасибо, все работает теперь)))
 
Цитата
Karataev написал:  this property is a shortcut for ActiveSheet.Range
Да, если обращение идет с основного модуля. Все неявно заданные объекты в родительском модуле класса считаются дочерними, именно поэтому в модуле формы можно напрямую обращаться к элементам формы по имени (без Me), а в модулях листов - аналогично к их ячейкам.
 
Можно мне еще спросить про картинки тут, чтобы не плодить новые темы?
1) У меня есть выпадающий список (в файле ячейка E28), как сделать так, чтобы макрос запускался отдельно при выборе нового значения из этого списка?
2) Можно ли запрограммировать перемещение картинки по листу по условию?
 
1. Вызов макроса повесить на событие изменения листа
2. Можно.
 
Пробую вот таким вот образом - игнорит. Ошибку не выдает, просто ничего не происходит
Скрытый текст


По поводу второго вопроса, как двигать конкретные изображения, если их будет несколько на листе?
 
Сдается мне, у Вас тут путаница с листами - проверьте, какие объекты с какого листа обрабатываются. По поводу перемещения изображений - обращайтесь к ним по названию или по индексу и делайте что хотите.
 
Подскажите, пожалуйста еще один момент. Как при помощи VBA поместить только что вставленную картинку на задний или передний план?
 
ESTerekhov, воспользуйтесь макрорекордером.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал: ESTerekhov, воспользуйтесь макрорекордером
Никак не получается сделать так, чтобы картинка сразу вставлялась на задний или на передний план.
Может есть функция какая? Подскажите, пожалуйста
 
ESTerekhov, команды от макрорекордера:
Код
1
2
Selection.ShapeRange.ZOrder msoSendToBack
Selection.ShapeRange.ZOrder msoBringToFront

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Да, но компилятор ругается, так как на листе вставлено несколько изображений. Мне нужно не меняя остальные, добавлять новые и удалять некоторые другие
 
ESTerekhov, покажите код и обозначьте место, где ругается.

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Цитата
JayBhagavan написал:
ESTerekhov, покажите код и обозначьте место, где ругается
уже не ругается, я немного по другому сделал)))
Я, возможно, нелогичен, но у меня теперь обратный вопрос: как сделать так, чтобы программа удаляла все вставленные изображения из определенного диапазона ячеек
 
вместо того, чтобы писать макросы, почитайте, как реализовать всё без макросов:
http://www.planetaexcel.ru/techniques/1/39/
Страницы: 1 2 След.
Читают тему
Наверх
Loading...