Отображение изображений из пути к файлу в элементе управления изображением

#excel #vba #ms-access

#excel #vba #ms-access

Вопрос:

У меня есть папка, в которой содержатся изображения, которые будут использоваться для записей в форме. Как мне получить одно изображение для отображения в несвязанном элементе управления изображением для всех записей с одинаковым ItemName и Model ?

Я ожидаю, что элементы будут одинаковыми ItemName и Model использовать одно и то же изображение. Изображения в настоящее время именуются с использованием уникального идентификатора, соответствующего ItemName полю. например, Изображение, соответствующее ItemName: Microwave Model: Q12V ItemNumber: 1223 , называется 1223.jpg . Я искал и искал какие-либо способы обойти это, но я ничего не наткнулся.

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

Спасибо.

Редактировать:

  Function GetImagePath(strIN As String) As String
 Dim strP As String
 strP = CurrentDb.TableDefs("tblDonatedItems").Connect
 strP = Mid(Left(strP, InStrRev(strP, "")), InStrRev(strP, "=")   1)   "ItemImages"
        GetImagePath = strP amp; _
        IIf(Dir(strP amp; strIN amp; ".jpg") <> "", strIN amp; ".jpg", "default-picture.bmp")
  

В свойстве изображения ControlSource :

 =GetImagePath([ItemName] amp; "_" amp; Replace([Model],"/","_"))
  

Комментарии:

1. Я никогда не использовал свойство изображения элемента управления изображением. Я бы просто использовал выражение в его свойстве ControlSource.

2. @June7 Потребуется ли для написания выражения в источнике управления какое-то извлечение пути к изображению? В настоящее время элемент управления не привязан, и я подумал, что переписывание последнего цикла, как в последней части моего сообщения, поможет. Я не уверен, как это сделать.

3. Я не понимаю, как сохраняются изображения. Не все ли они находятся в известной папке? Выражение в ControlSource может включать функцию, которая строит путь и объединяет с полем, например: =ImagePath() amp; Nz([fieldname], "default-picture.bmp") .

4. @June7 Путь к изображению существует вместе с внутренним файлом. В настоящее время я выкапываю его с помощью strBackEndPath = Mid(Left(strBackEndPath, InStrRev(strBackEndPath, "")), i) "ItemImages" .

5. Всегда будет значение ImageNumber, но, возможно, не соответствующий файл изображения, и в этом случае должно отображаться значение default-picture.bmp, и это изображение находится в той же папке, что и другие изображения?

Ответ №1:

Поскольку ни имя элемента, ни модель не являются частью имени изображения, на самом деле не понимаю, насколько они актуальны. Конечно, это не может быть фактором при выборе изображения.

Рассмотрим что-то вроде:

 Function GetImagePath(strIN As String) As String
Dim strP As String
strP = CurrentDb.TableDefs("tblDonatedItems").Connect
strP = Mid(Left(strP, InStrRev(strP, "")), InStrRev(strP, "=")   1)
If Dir(strP amp; strIN amp; ".jpg") <> "" Then
    GetImagePath = strP amp; strIN amp; ".jpg"
ElseIf  Dir(strP amp; strIN amp; ".png") <> "" Then
    GetImagePath = strP amp; strIN amp; ".png"
Else
    GetImagePath = strP amp; "default-picture.bmp"
End If
End Function
  

Вызов функции из ControlSource элемента управления изображением:
=GetImagePath([ItemNumber])

Если изображения должны различаться по имени элемента и / или модели, тогда необходимо переименовать изображения и объединить поля в вызове функции:
=GetImagePath([ItemName] amp; "_" amp; Replace([Model], "/", "_")

Комментарии:

1. Вао, ты просто взорвал мой разум. Я попробовал это, и я вижу некоторые положительные признаки. В некоторых случаях я получаю No current record предупреждение. Было бы хорошо, если бы я мог переименовать изображения, чтобы их можно было различать с помощью ItemName Model полей и . Проблема в том, что в полях модели есть сложные символы, например. V5/20S.EE Кроме того, некоторые изображения имеют .PNG расширения.

2. Потребуется развернуть код для проверки различных расширений файлов. Дайте имена изображений, используя модель, более похожую на: V5_20S.EE тогда функция может выполнить операцию Replace() над данными для символа / . Кодирование для управления всеми возможными недопустимыми символами может немного усложниться.

3. Вы имеете в виду переименование изображений с использованием ItemName и модели, например ItemName: , Microwave, а Model: V5/20S.EE Microwave_V5_20S.EE затем использование нового имени в функции усложнит ситуацию?

4. Может быть, не так уж плохо, если / — это только недопустимый символ. Пришлось бы объединить поля и заменить / подчеркиванием, чтобы соответствовать фактическим именам файлов изображений. Это можно сделать в вызове функции : =GetImagePath([ItemName] amp; "_" amp; Replace([Model], "/", "_")) .

5. Я реализовал код, но я продолжаю получать No current record оповещения о некоторых записях. Изображение по умолчанию также не загружается. Должно быть, я неправильно реализовал код.