Беглый поиск не дал 100% подходящего решения, в связи с чем прошу вашей помощи!
Есть файл excel с презентацией объекта на одном листе, в который собирается информацию из разных книг - это реализовано и работает нормально. Данные меняются на лету в зависимости от выбранного имени объекта.
Необходимо в определенной ячейке налету заменять фотографию на фото из подпапки /photo в той же папке, где и исходный файл, с именем, соответствующим имени объекта, менять размер фотографии.
Дополнительно нужен отдельный макрос, который будет сохранять лист в pdf в подпапку /out c именем, соответствующим имени объекта.
Доброго дня, коллеги!
Беглый поиск не дал 100% подходящего решения, в связи с чем прошу вашей помощи!
Есть файл excel с презентацией объекта на одном листе, в который собирается информацию из разных книг - это реализовано и работает нормально. Данные меняются на лету в зависимости от выбранного имени объекта.
Необходимо в определенной ячейке налету заменять фотографию на фото из подпапки /photo в той же папке, где и исходный файл, с именем, соответствующим имени объекта, менять размер фотографии.
Дополнительно нужен отдельный макрос, который будет сохранять лист в pdf в подпапку /out c именем, соответствующим имени объекта.Russel
Вариант с ActiveX image и UDF для проверки данных [vba]
Код
Function xx() As Range With [Z2].Resize(9) .Value = [transpose(transpose(Text(Row(R1:R9),"ТО 000")))] Set xx = .Cells End With On Error Resume Next Dim sFolder: sFolder = ThisWorkbook.Path & "\Photo\" With Application.Caller .Parent.OLEObjects("Image1").Object.Picture = LoadPicture(sFolder & .Value & ".jpg") End With End Function
[/vba]
Вариант с ActiveX image и UDF для проверки данных [vba]
Код
Function xx() As Range With [Z2].Resize(9) .Value = [transpose(transpose(Text(Row(R1:R9),"ТО 000")))] Set xx = .Cells End With On Error Resume Next Dim sFolder: sFolder = ThisWorkbook.Path & "\Photo\" With Application.Caller .Parent.OLEObjects("Image1").Object.Picture = LoadPicture(sFolder & .Value & ".jpg") End With End Function
Андрей, я очень извиняюсь за беспокойство, но похоже, что фал тот же самый, по крайней мере работает также и макрос в модуле идентичный. UPD С масштабирование разобрался. Еще вопрос: как перенести функционал в рабочий файл? Макрос скопировать и вставил в модуль рабочей книги, добавил АктивХ изображение, что еще нужно сделать чтобы все работало??
Андрей, я очень извиняюсь за беспокойство, но похоже, что фал тот же самый, по крайней мере работает также и макрос в модуле идентичный. UPD С масштабирование разобрался. Еще вопрос: как перенести функционал в рабочий файл? Макрос скопировать и вставил в модуль рабочей книги, добавил АктивХ изображение, что еще нужно сделать чтобы все работало??Russel
QIWI 9173973973
Сообщение отредактировал Russel - Четверг, 27.02.2020, 18:13
на ленте Разработчик->Режим конструктора ПКМ по activex контролу -> Свойства установить необходимые свойства, убедиться что имя контрола в свойствах совпадает с именем, прописанном в макросе, добавить имя в диспетчер имен и использовать его в проверке данных
UPD. Если объект невидим, то его можно выделить через Alt+F10
на ленте Разработчик->Режим конструктора ПКМ по activex контролу -> Свойства установить необходимые свойства, убедиться что имя контрола в свойствах совпадает с именем, прописанном в макросе, добавить имя в диспетчер имен и использовать его в проверке данных
UPD. Если объект невидим, то его можно выделить через Alt+F10krosav4ig
Скажите пожалуйста, у вас он тоже медленно работает. У меня есть файл, правда на менее изображений в разы. Там через диспетчер имен все реализовано. То быстрее работает. Или это зависит от размера изображения?
Скажите пожалуйста, у вас он тоже медленно работает. У меня есть файл, правда на менее изображений в разы. Там через диспетчер имен все реализовано. То быстрее работает. Или это зависит от размера изображения?Santtic
krosav4ig, спасибо! Теперь все как доктор прописал!
Макрос сохранения в ПДФ нашел на параллельном сайте: [vba]
Код
Sub сохранить() Dim Fname As String Fname = "C:\PDFs\" & Sheets("Лист1").Range("B2").Value ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fname, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End Sub
[/vba]
krosav4ig, спасибо! Теперь все как доктор прописал!
Макрос сохранения в ПДФ нашел на параллельном сайте: [vba]
Код
Sub сохранить() Dim Fname As String Fname = "C:\PDFs\" & Sheets("Лист1").Range("B2").Value ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Fname, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False End Sub