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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2015, 13:36   #1
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию Выбор фото по табельным номерам

Есть папка "фото", в ней .JPG файлы. Название всех .JPG файлов начинается с буквы "P". Допустим, вот так: P000020, P600255, P45874852 и т.д. По условиям эти .JPG файлы надо показать XLS файле в конктетном ячейке. Допустим, если выбран табельный номер 600255, тогда P600255 должен показатся на листе Excel. Помогите пожалуйста, как можно делать такое.
Aqil_f вне форума Ответить с цитированием
Старый 31.01.2015, 18:07   #2
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Надо вставлять: на лист , на конкретное ячейке (допустим B10) и менять когда табельный номер меняется (табельный номер находится в B2)
Aqil_f вне форума Ответить с цитированием
Старый 31.01.2015, 18:55   #3
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Укажите свою папку с фото и разместите строго в модуле нужного рабочего листа :

Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Address = "$B$2" Then 'Or Intersect()
       iFileName$ = "C:\Фото\P" & CStr(Target) & ".JPG"
       
       If Dir(iFileName$) <> "" Then
          Me.Pictures.Delete
          With Me.Range("B10")
               Me.Shapes.AddPicture iFileName$, msoFalse, msoTrue, .Left, .Top, .Width, .Height
          End With
       Else
          MsgBox "Файл изволит отсутствовать", vbCritical, ""
       End If
    End If
End Sub
P.S. Если на листе есть и другая графика, то вместо удаления всех картинок, имеет смысл удалять вполне конкретную.

Последний раз редактировалось pashulka; 31.01.2015 в 19:03.
pashulka вне форума Ответить с цитированием
Старый 31.01.2015, 21:24   #4
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

pashulka, большое спасибо, то что надо. Только, фотография на одну ячейку не помещается (очень маленький и ничего не видно). Я хотел обяденить несколько ячеек, но все равно не получается
Aqil_f вне форума Ответить с цитированием
Старый 31.01.2015, 22:39   #5
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Aqil_f, Если замените .Width и .Height на -1 , то начиная с Excel2000 получите картинку в "натуральную величину"

P.S. Если же использование об'единённых ячеек необходимо, то оставьте первоначальный вариант, но с Me.Range("B10").MergeArea

Последний раз редактировалось pashulka; 31.01.2015 в 22:42.
pashulka вне форума Ответить с цитированием
Старый 01.02.2015, 18:37   #6
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

pashulka,
Мне больше подходит использование об'единённых ячеек , потому что натуральная величина картинки очень большой. Но я только что заметил что, если табельный номер не правильно написано, или В2 пусто, тогда картинка не удаляется. По этому я после Else добавил Me.Pictures.Delete. Это правильно?
Aqil_f вне форума Ответить с цитированием
Старый 02.02.2015, 07:38   #7
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

Можно просто удалять картинки(у) перед проверкой на существование файла ( If Dir(iFileName$) ... )
pashulka вне форума Ответить с цитированием
Старый 06.02.2015, 11:17   #8
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

pashulka, большое спасибо Вам. Все правильно работает.
Но, если можно, еще 1 вопрос: Табельный номер в ячейке если от руки писать, тогда все правильно работает. Но, в ячейке В2 у меня ссылка есть: B2=List4!C2.

Картинка обнавляется только тогда, когда если закрыть файл, и открыть еще раз. Или нажать ентер на самом ссылке. Как можно делать эта обнавления автоматически?
Aqil_f вне форума Ответить с цитированием
Старый 06.02.2015, 19:54   #9
pashulka
Форумчанин
 
Регистрация: 03.11.2006
Сообщений: 524
По умолчанию

1) Либо сохраните событие в модуле листа с именем List4, разумеется, не забыв заменить Лист1 на кодовое(программное) имя листа, где будет выводиться картинка.

Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    If Target.Address = "$C$2" Then 'Or Intersect()
       iFileName$ = "C:\Фото\P" & CStr(Target) & ".JPG"
       
       If Dir(iFileName$) <> "" Then
          Лист1.Pictures.Delete
          With Лист1.Range("B10")
               Лист1.Shapes.AddPicture iFileName$, msoFalse, msoTrue, .Left, .Top, .Width, .Height
          End With
       Else
          MsgBox "Файл изволит отсутствовать", vbCritical, ""
       End If
    End If
End Sub
2) Либо попробуйте приспособить событие Worksheet_Calculate()
pashulka вне форума Ответить с цитированием
Старый 09.02.2015, 09:52   #10
Aqil_f
Форумчанин
 
Регистрация: 12.05.2009
Сообщений: 273
По умолчанию

Я хотел использувать 1-й вариант, но что-то у меня не получается. Посмотрите пример, пожалуйста. (картинка будет выводиться в List4.)
Вложения
Тип файла: rar kd.rar (13.6 Кб, 16 просмотров)
Aqil_f вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск изображений по номерам vadimka77 HTML и CSS 5 08.10.2014 12:16
Объединение яйчеек по номерам Pimalux Microsoft Office Excel 7 15.07.2009 13:06
Программа рассылки сообщений по номерам ICQ Romanus Софт 7 09.06.2007 11:52