Здравствуйте. Помогите пожалуйста. Название темы лёгкое, потому что не смог поместить всей сути проблемы, но саму задачу отображает.
Описание задачи.
В столбике А находятся значения от =ВПР(...), допустим это будет A 235Х623 1235545 646685Х
В папке C://IMG, находятся папки с названиями этих значений(но могут и не находится) Пример: C://IMG/235Х623 В этой папке есть картинки (jpg-формат), картинки имеют разные названия и размеры, их может быть много, одна или вообще не быть (папка пустая)
Нужно, что-бы макрос находил по значению ячейки столбика А папку и вставлял картинку из этой папки напротив в столбик Б и при этом картинка должна отображаться не больше чем сама ячейка (картинка должна быть ужата и не менять размеры самой ячейки) Так как картинок может быть много в папке, то должна вставляться только одна картинка, по дате создания, а именно самая старая из всех находящихся в этой папке
Пример результата
А Б 3849595 Картинка 59у4580 Картинка
Очень надеюсь на Вашу помощь.
Здравствуйте. Помогите пожалуйста. Название темы лёгкое, потому что не смог поместить всей сути проблемы, но саму задачу отображает.
Описание задачи.
В столбике А находятся значения от =ВПР(...), допустим это будет A 235Х623 1235545 646685Х
В папке C://IMG, находятся папки с названиями этих значений(но могут и не находится) Пример: C://IMG/235Х623 В этой папке есть картинки (jpg-формат), картинки имеют разные названия и размеры, их может быть много, одна или вообще не быть (папка пустая)
Нужно, что-бы макрос находил по значению ячейки столбика А папку и вставлял картинку из этой папки напротив в столбик Б и при этом картинка должна отображаться не больше чем сама ячейка (картинка должна быть ужата и не менять размеры самой ячейки) Так как картинок может быть много в папке, то должна вставляться только одна картинка, по дате создания, а именно самая старая из всех находящихся в этой папке
Ребята, помогите. Я упростила задачу. Помогите сделать ну хотя бы так Нужно, что-бы макрос находил по значению ячейки столбика А папку и вставлял картинку из этой папки напротив в столбик Б и при этом картинка должна отображаться не больше чем сама ячейка.
Пожааааааалуйста
Ребята, помогите. Я упростила задачу. Помогите сделать ну хотя бы так Нужно, что-бы макрос находил по значению ячейки столбика А папку и вставлял картинку из этой папки напротив в столбик Б и при этом картинка должна отображаться не больше чем сама ячейка.
китин уже намекал, я расшифрую: приложите файл с примером в формате Excel в соответствии с правилами форума
Ааа, так это намёк бык такой. Честно и не поняла. Но как то странно прилагать сюда файл с двумя колонками. Я же написала как должен выглядеть результат
китин уже намекал, я расшифрую: приложите файл с примером в формате Excel в соответствии с правилами форума
Ааа, так это намёк бык такой. Честно и не поняла. Но как то странно прилагать сюда файл с двумя колонками. Я же написала как должен выглядеть результат
Маленький уточняющих вопрос, что нужно поменять, если я захочу выбрать другой столбец для вставки картинки или имена файлов будут не в столбике А. А то, что я в этом скрипте вообще не вижу, ни А ни Б :))
Маленький уточняющих вопрос, что нужно поменять, если я захочу выбрать другой столбец для вставки картинки или имена файлов будут не в столбике А. А то, что я в этом скрипте вообще не вижу, ни А ни Б :))DKR
Ой и ещё заметила. Если номера повторяются, то картинка будет только напротив последнего номера. Сделайте пожалуйста, что бы картинка была на против всех номеров, даже повторяющихся :shy:
Ой и ещё заметила. Если номера повторяются, то картинка будет только напротив последнего номера. Сделайте пожалуйста, что бы картинка была на против всех номеров, даже повторяющихся :shy:DKR
Сообщение отредактировал DKR - Суббота, 14.01.2023, 23:02
К сожалению не работает Пишет Path not found Запускаю первый макрос, он работает, не выдаёт ошибок.
Наверно дело, в поиске самой старой картинки. Эта опция должна идти обязательно вместе с поиском папок в папке, так как я писала в самом начале. (Папке много папок, а в них картинки) Но потом я упростила задачу (отфильтровала пайтаном) и теперь в одной папке находятся все уникальные картинки и сортировка по дате уже не нужна. Но если Вы сделаете полностью, это было бы очень удобно, так как мне каждый раз надо фильтровать - подготавливать папку пайтаном.
К сожалению не работает Пишет Path not found Запускаю первый макрос, он работает, не выдаёт ошибок.
Наверно дело, в поиске самой старой картинки. Эта опция должна идти обязательно вместе с поиском папок в папке, так как я писала в самом начале. (Папке много папок, а в них картинки) Но потом я упростила задачу (отфильтровала пайтаном) и теперь в одной папке находятся все уникальные картинки и сортировка по дате уже не нужна. Но если Вы сделаете полностью, это было бы очень удобно, так как мне каждый раз надо фильтровать - подготавливать папку пайтаном.DKR
Спасибо, работает. Но есть маленький недостаток. Если ячейка с номером пустая, то макрос вставляет картинку, которая находится в основной папке Пример C://IMG/123456.jpg Пример Хотя все нужные картинки находятся в подпапках. C://IMG/235Х623/6483903.jpg
Можете немного исправить, что бы, если ячейка пуста, то ничего не вставлять (и не брать из основной папки)
Спасибо, работает. Но есть маленький недостаток. Если ячейка с номером пустая, то макрос вставляет картинку, которая находится в основной папке Пример C://IMG/123456.jpg Пример Хотя все нужные картинки находятся в подпапках. C://IMG/235Х623/6483903.jpg
Можете немного исправить, что бы, если ячейка пуста, то ничего не вставлять (и не брать из основной папки) DKR
Сообщение отредактировал DKR - Воскресенье, 15.01.2023, 16:15
Вот для этого и нужны адекватные файлы-примеры с всеми возможными вариантами исходных данных, чтобы не было этих бесконечных "маленьких недостатков" [vba]
Код
Public Sub InsPict() Dim fldPath$, art$, fName$, i&, r0&, lrow&, iShape As Shape, Zm, dat For Each iShape In ActiveSheet.Shapes If iShape.Type <> 8 Then iShape.Delete Next fldPath = "C:\IMG\" 'ThisWorkbook.Path & "\images\" 'путь к папке с изображениями r0 = 2 lrow = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False On Error Resume Next For i = r0 To lrow If Cells(i, "A") <> "" Then fName = Dir(fldPath & Cells(i, "A") & "\*.jpg") dat = FileDateTime(fldPath & Cells(i, "A") & "\" & fName) Do While fName <> "" fName = fldPath & Cells(i, "A") & "\" & fName If FileDateTime(fName) <= dat Then If ActiveSheet.Shapes(ActiveSheet.Shapes.Count).TopLeftCell.Top = ActiveCell.Top Then ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Delete art = Split(fName, ".")(0) With Cells(i, "B") Set iShape = ActiveSheet.Shapes.AddPicture(fName, False, True, .Left + 1, .Top + 1, -1, -1) Zm = WorksheetFunction.Min(.Width / iShape.Width, .Height / iShape.Height) iShape.Height = iShape.Height * Zm - 2 End With dat = FileDateTime(fName) End If fName = Dir Loop End If Next i Application.ScreenUpdating = True End Sub
[/vba]
Вот для этого и нужны адекватные файлы-примеры с всеми возможными вариантами исходных данных, чтобы не было этих бесконечных "маленьких недостатков" [vba]
Код
Public Sub InsPict() Dim fldPath$, art$, fName$, i&, r0&, lrow&, iShape As Shape, Zm, dat For Each iShape In ActiveSheet.Shapes If iShape.Type <> 8 Then iShape.Delete Next fldPath = "C:\IMG\" 'ThisWorkbook.Path & "\images\" 'путь к папке с изображениями r0 = 2 lrow = Cells(Rows.Count, 1).End(xlUp).Row Application.ScreenUpdating = False On Error Resume Next For i = r0 To lrow If Cells(i, "A") <> "" Then fName = Dir(fldPath & Cells(i, "A") & "\*.jpg") dat = FileDateTime(fldPath & Cells(i, "A") & "\" & fName) Do While fName <> "" fName = fldPath & Cells(i, "A") & "\" & fName If FileDateTime(fName) <= dat Then If ActiveSheet.Shapes(ActiveSheet.Shapes.Count).TopLeftCell.Top = ActiveCell.Top Then ActiveSheet.Shapes(ActiveSheet.Shapes.Count).Delete art = Split(fName, ".")(0) With Cells(i, "B") Set iShape = ActiveSheet.Shapes.AddPicture(fName, False, True, .Left + 1, .Top + 1, -1, -1) Zm = WorksheetFunction.Min(.Width / iShape.Width, .Height / iShape.Height) iShape.Height = iShape.Height * Zm - 2 End With dat = FileDateTime(fName) End If fName = Dir Loop End If Next i Application.ScreenUpdating = True End Sub
Вот для этого и нужны адекватные файлы-примеры с всеми возможными вариантами исходных данных, чтобы не было этих бесконечных "маленьких недостатков"
Здравствуйте. Да я Вас понимаю и извиняюсь. Просто мне самой сверху спустили это задание, я так же сказала, дайте пример, а мне ответили, что зачем он нужен там же всего два столбика. И в процессе теста или использования могут появится трудности, о которых и не предполагал на момент формирования задачи.
Скрипт работает отлично. Но как оказалось, я об этом не знала, файл содержит более 50 тыс. номером и при загрузке картинок или сохранении он просто вылетает. Что бы такого не было, было решено, что бы не все картинки показывались сразу. Если у Вас есть время можете сделать так, что бы отображалась только та картинка, на строчке которой находится активная ячейка.
Например я перехожу на строчку 5, скрипт читает номер из столбика А и показывает картинку на против в Б, как только я перехожу на другую строчку, например на 10, картинка из строчки 5 исчезает и отображается картинка на против из строчки 10 . Что бы всегда отображалась одна картинка, той строки которая активна.
Вот для этого и нужны адекватные файлы-примеры с всеми возможными вариантами исходных данных, чтобы не было этих бесконечных "маленьких недостатков"
Здравствуйте. Да я Вас понимаю и извиняюсь. Просто мне самой сверху спустили это задание, я так же сказала, дайте пример, а мне ответили, что зачем он нужен там же всего два столбика. И в процессе теста или использования могут появится трудности, о которых и не предполагал на момент формирования задачи.
Скрипт работает отлично. Но как оказалось, я об этом не знала, файл содержит более 50 тыс. номером и при загрузке картинок или сохранении он просто вылетает. Что бы такого не было, было решено, что бы не все картинки показывались сразу. Если у Вас есть время можете сделать так, что бы отображалась только та картинка, на строчке которой находится активная ячейка.
Например я перехожу на строчку 5, скрипт читает номер из столбика А и показывает картинку на против в Б, как только я перехожу на другую строчку, например на 10, картинка из строчки 5 исчезает и отображается картинка на против из строчки 10 . Что бы всегда отображалась одна картинка, той строки которая активна.DKR