Страницы: 1
RSS
Привязка картинки к ячейке (картинки в другой книге)
 
Здравствуйте. Подскажите, есть файл EXCEL первый столбец название, второй столбец картинка. Как можно сделать, чтоб на другом листе допустим вводим название в определенную ячейку, а в соседней отображается картинка. Примерно как ВПР только с картинкой. Может есть другой способ, или надо как то особенно привязать картинку к ячейке??
 
изучите статью там все есть.
По вопросам из тем форума, личку не читаю.
 
Это да сделал без проблем. Но книгу с фото пришлось делать в другом документе, так как более 6000 фотографий. И обновляется фотография только после открытия документа с фото. Может макрос какой то посоветуйте. Пробовал
Код
Private Sub ва ()
ActiveWorkbook.RefreshAll
End Sub

Не помогает.
Так же делал
Код
Private Sub CommandButton1_Click()
Application.ScreenUpdating = False
Workbooks.Open Filename:="C:\Users\11\222\333\444\foto.xlsx"
ActiveWorkbook.Save
ActiveWorkbook.Close
End Sub

Очень долго открывает и закрывает книгу. Может кто чего подскажет?
Изменено: vendigo - 26.01.2020 14:06:35
 
При таком кол-ве картинок - вряд ли кто чего подскажет. Менять подход кардинально, если только. Картинки держать в отдельной папке, давать им осознанные имена и макросом вытягивать нужную при изменении ячейки. Возможно, это будет быстрее.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Код
Option Explicit
Public Sub InsPict()
Dim arr, fldPath$, art$, fName$, i&, r0, lrow&, oDic As Object, IShape As Shape, Zm
Set oDic = CreateObject("Scripting.Dictionary")
r0 = 4
lrow = Cells(Rows.Count, 3).End(xlUp).Row
arr = Cells(r0, 3).Resize(lrow - r0 + 1).Value
For i = 1 To UBound(arr)
oDic(arr(i, 1)) = i + r0 - 1
Next i
For Each IShape In ActiveSheet.Shapes
If IShape.Type <> 8 Then On Error Resume Next
Next
fldPath = ThisWorkbook.Path & "\images\"    путь к папке
Application.ScreenUpdating = False
fName = Dir(fldPath & "*.jpg")
Do While fName <> ""
art = Split(fName, ".")(0)
If oDic.Exists(art) Then
With Cells(oDic(art), 2)
Set IShape = ActiveSheet.Shapes.AddPicture(fldPath & 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
End If
fName = Dir
Loop
Application.ScreenUpdating = True
End Sub


Нашел такой код, в принципе все ок, но... Помогите пожалуйста переделать. Всего надо вставлять одну картинку, (имя картинки брать с определенной ячейки, и вставлять тоже в конкретную, ресайз картинки по размеру ячейки. Заранее благодарен.
Изменено: vendigo - 29.01.2020 16:52:50
 
Правильно поставленная задача, путь к решению вопроса. Нужен макрос для поиска и вставки картинки. На лите 1 в ячейке b12 будет прописываться имя картинки, которые хранятся в папке pictutres. После заполнения ячейки b12 картинка должна появиться на листе 2 в ячейке d99, размером с габаритом ячейки. Макрос, который я Писал выше, работает но не так. Помогите пожалуйста...
 
Получите, распишитесь:
Код
Sub InsertPicToCell()
    Const sPicsPath$ = "G:\Документы\Изображения\"
    Dim sPicName$, sPFName$
    Dim IShape As Shape
    Dim zm#
    
    sPicName = Range("B12").Value
    If sPicName = "" Then
        Exit Sub
    End If
    sPFName = sPicsPath & sPicName
    If Dir(sPFName, 16) = "" Then
        Exit Sub
    End If
    With Sheets(2).Range("D99")
        Set IShape = Sheets(2).Shapes.AddPicture(sPFName, False, True, .Left+1, .Top+1, -1, -1)
        zm = Application.Min(.Width / IShape.Width, .Height / IShape.Height)
        IShape.Height = IShape.Height * zm - 2
    End With
End Sub
останется по необходимости закинуть это в модуль листа с именем картинки и привязать к событию изменения ячейки B12. Возможно, надо удалять изначально вставленную картинку из листа2. Если да - то:
Код
Sub InsertPicToCell()
    Const sPicsPath$ = "G:\Документы\Изображения\"
    Dim sPicName$, sPFName$, sSpName$
    Dim IShape As Shape
    Dim zm#
    
    sPicName = Range("B12").Value
    If sPicName = "" Then
        Exit Sub
    End If
    sPFName = sPicsPath & sPicName
    If Dir(sPFName, 16) = "" Then
        Exit Sub
    End If
    
    With Sheets(2).Range("D99")
        On Error Resume Next
        sSpName = "_" & .Address(0, 0) & "_autopaste"
        Set IShape = Sheets(2).Shapes(sSpName)
        If Not IShape Is Nothing Then
            IShape.Delete
        End If
        Set IShape = Sheets(2).Shapes.AddPicture(sPFName, False, True, .Left + 1, .Top + 1, -1, -1)
        zm = Application.Min(.Width / IShape.Width, .Height / IShape.Height)
        IShape.Height = IShape.Height * zm - 2
        IShape.Name = sSpName
    End With
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 04.02.2020 18:11:17
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий, спасибо Вам большое, Вы молодец!!! Все работает. А для сетевой папки Const sPicsPath$ = подойдет??
Изменено: vendigo - 05.02.2020 19:23:57
 
Цитата
vendigo написал:
А для сетевой папки Const sPicsPath$ = подойдет?
попробуйте и узнаете. Должно сработать, но там нюансы могут быть.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх