#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
оповещения о некоторых записях. Изображение по умолчанию также не загружается. Должно быть, я неправильно реализовал код.