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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2016, 20:55   #1
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
Радость Вставка полноразмерных картинок из HDD в ячейки

Макрос с сайта http://ExcelVBA.ru

На данный момент работает исправно, за исключением случая, когда вставляется "глубокое фото" (т.е. когда длина меньше высоты) в ряду с прочими:



Код:
Option Compare Text
Public FileNames As Collection

Sub Main()
    On Error Resume Next
      
    ПутьКПапкеСКартинками = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "")    ' там же, где и этот файл

    Application.ScreenUpdating = False: msg = "": Application.DisplayAlerts = False
    Dim sh As Worksheet: Set sh = ActiveSheet
    УдалениеКартинок    ' очистка всех ячеек листа от прежнего содержимого
    Set FileNames = New Collection: On Error Resume Next
    Call ReadFileNames(ПутьКПапкеСКартинками)    ' поиск подходящих файлов во всех подпапках

    Dim cell As Range, ra As Range: Application.ScreenUpdating = False

    For Each file In FileNames
        Debug.Print Dir(file)
        Set cell = Range("b" & Rows.Count).End(xlUp).Offset(1)
        ВставитьКартинку cell.Previous, file
        cell = Dir(file)
    Next
    Application.ScreenUpdating = True
End Sub

Sub ВставитьКартинку(ByRef cell As Range, ByVal Pic As String)
    On Error Resume Next
    Dim ph As Picture: Set ph = cell.Parent.Pictures.Insert(Pic)
    ph.Top = cell.Top: ph.Left = cell.Left: k = ph.Width / ph.Height
    ph.Width = cell.Width: ph.Height = ph.Width / k
    cell.EntireRow.RowHeight = ph.Height
End Sub
Для удаления картинок используется:

Код:
Sub УдалениеКартинок()
On Error Resume Next
ActiveSheet.Shapes.SelectAll
Selection.Delete
On Error GoTo 0
End Sub
Быть может, есть у Вас идеи, как реализовать в рамках указанного выше кода, либо с использованием других путей вставку фотографий разных форматов и пропорций в ячейки без изменения размеров фото так, чтобы они отображались корректно (без отображенной на экране выше ошибки).

Спасибо за Ваши ответы!
http://imageshack.com/a/img922/5707/6yizfA.gif
Lama Under Cover вне форума Ответить с цитированием
Старый 15.09.2016, 21:51   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Специально для устранения этих проблем я сделал расширенную версию этого макроса:
http://excelvba.ru/programmes/PastePictures
Там все вставляется корректно, и много опций по настройке размеров
EducatedFool вне форума Ответить с цитированием
Старый 15.09.2016, 22:12   #3
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Специально для устранения этих проблем я сделал расширенную версию этого макроса:
http://excelvba.ru/programmes/PastePictures
Там все вставляется корректно, и много опций по настройке размеров
Добрый вечер! Тестирую на данный момент несколько вариантов

1) вставка в примечания с http://www.planetaexcel.ru/techniques/9/128/;
2) указанный выше макрос;
3) Вашу надстройку;
4) нашел еще один Ваш макрос (код ниже), интересно:

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

Код:
Private Sub Workbook_SheetSelectionChange(ByVal sh As Object, ByVal Target As Range)
    On Error Resume Next
    Dim cell As Range: Set cell = Target.EntireRow.Cells(4)
    If cell.Hyperlinks.Count > 0 Then
        PicPath = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, cell.Hyperlinks(1).Address)
        If Dir(PicPath) <> "" Then
            With F
                .Picture = LoadPicture(PicPath)
                .Width = F.Picture.Width / 143: .Height = F.Picture.Height / 143
                .Top = Application.Top + 19 'отступы от окна
                .Left = Application.Left + 19 'отступы от окна
                .Caption = cell.Previous.Previous.Previous: .Show
            End With
        End If
    Else
        F.Hide
    End If
End Sub
http://imageshack.com/a/img922/5707/6yizfA.gif

Последний раз редактировалось Lama Under Cover; 15.09.2016 в 22:15.
Lama Under Cover вне форума Ответить с цитированием
Старый 18.09.2016, 17:56   #4
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
По умолчанию

Дело в том, что качественные фотографии, например 5000 на 3000 пикселей сразу открываются в масштабе 100%, по этой причине моего монитора 1920 1080 не хватает на подобные превьюшки!

Как лучше сделать то же самое, но уже с двумя столбцами для каждого имени, т.е. вместо текущего одного изображения для наименования будут отображаться два?

Сам для этого заменил
Код:
Target.EntireRow.Cells(4)
на
Код:
Target.Cells
, все работает, однако имена коротких файлов открываются по ссылке при выделении ячейки, чего не происходит с длинными именами =/


Файл в приложении! Для корректной работы обязательно нужно разархивировать файлы после скачивания
Вложения
Тип файла: rar Пример.rar (1.42 Мб, 21 просмотров)
http://imageshack.com/a/img922/5707/6yizfA.gif

Последний раз редактировалось Lama Under Cover; 18.09.2016 в 20:34. Причина: Добавил файл
Lama Under Cover вне форума Ответить с цитированием
Старый 18.09.2016, 20:39   #5
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
По умолчанию

Разобрался! Всему виной то, что названия файлов у меня содержали лишь цифры, поэтому приходилось ждать при наведении несколько секунд.

Надеюсь на чью-либо помощь в разрешении основной задачи - уменьшить картинку при сохранении пропорций..
http://imageshack.com/a/img922/5707/6yizfA.gif
Lama Under Cover вне форума Ответить с цитированием
Старый 19.09.2016, 00:23   #6
Step_UA
Форумчанин
 
Аватар для Step_UA
 
Регистрация: 09.06.2011
Сообщений: 388
По умолчанию

Цитата:
Сообщение от Lama Under Cover Посмотреть сообщение
...уменьшить картинку при сохранении пропорций..
Если под уменьшением подразумевается ее "полное" отображение в форме, то установите для свойства формы PictureSizeMode значение fmPicrureSizeModeZoom
на неконкретные вопросы даю неконкретные ответы ...
Step_UA вне форума Ответить с цитированием
Старый 21.09.2016, 23:38   #7
Lama Under Cover
Пользователь
 
Аватар для Lama Under Cover
 
Регистрация: 15.08.2016
Сообщений: 32
По умолчанию

Цитата:
Сообщение от Step_UA Посмотреть сообщение
Если под уменьшением подразумевается ее "полное" отображение в форме, то установите для свойства формы PictureSizeMode значение fmPicrureSizeModeZoom
Спасибо! Спасли идею =]

Лучшее решение для предпросмотра картинок, на мой взгляд, из всех рассмотренных мною, именно это!

Все работает! И, что самое главное, быстро работает!
http://imageshack.com/a/img922/5707/6yizfA.gif

Последний раз редактировалось Lama Under Cover; 21.09.2016 в 23:44.
Lama Under Cover вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка изображений в объединенные ячейки maragva Microsoft Office Excel 1 03.04.2014 20:20
Вставка картинок, вытянутых из Базы Данных Apoka5555 Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate) 0 04.10.2013 21:47
StringGrid: вставка картинок Grass-snake Общие вопросы Delphi 2 25.10.2011 15:00
Вставка картинок в текстовый документ PONKA Общие вопросы Delphi 0 04.02.2009 12:54