#vba #image #ms-access #catalog
#vba #изображение #ms-access #каталог
Вопрос:
Я действительно испытываю трудности и подумал, может ли кто-нибудь помочь, пожалуйста? Я пытаюсь настроить базу данных с изображениями, что я и сделал, и использовал путь к файлу моих изображений. Это работает хорошо, и это здорово, но следующий шаг — создать форму, которая просто отображает картинки из каждой записи, чтобы действовать как каталог, а затем, когда вы нажимаете на конкретную картинку в этой форме, открывается другая форма, которая содержит все записи и переходит непосредственно к указанной записи. Нам удалось заставить это работать для первого изображения и записи, но мы не можем понять, как заставить его перейти к следующей записи для следующего изображения. Я пытаюсь использовать многострочную форму для этого, чтобы было видно только изображение. Я просто использую базовый код, поскольку я только начал работать с VBA, но я полагаю, что это может не сработать. Может кто-нибудь, пожалуйста, посоветовать мне?
Я использовал следующий код, который был предложен онлайн для работы с изображениями, а затем есть пара других vba-кодов для добавления к нему. Мне нужно создать каталог инвентаризации, но мы хотим щелкнуть по изображению элемента инвентаризации, который затем откроет форму со всеми подробностями. Я нашел обходной путь с использованием непрерывной формы и прозрачных кнопок, которые приводят вас к конкретной записи, но, похоже, вы не можете изменить макет. В идеале я хочу иметь форму, в которой по всей странице будут только изображения в стиле сетки, а не просто список, идущий вниз по странице … если это имеет смысл?
Option Compare Database
Option Explicit
Public Function DisplayImage(ctlImageControl As Control, strImagePath As Variant) As String
On Error GoTo Err_DisplayImage
Dim strResult As String
Dim strDatabasePath As String
Dim intSlashLocation As Integer
With ctlImageControl
If IsNull(strImagePath) Then
.Visible = False
strResult = "No image name specified."
Else
If InStr(1, strImagePath, "") = 0 Then
' Path is relative
strDatabasePath = CurrentProject.FullName
intSlashLocation = InStrRev(strDatabasePath, "", Len(strDatabasePath))
strDatabasePath = Left(strDatabasePath, intSlashLocation)
strImagePath = strDatabasePath amp; strImagePath
End If
.Visible = True
.Picture = strImagePath
strResult = "Image found and displayed."
End If
End With
Exit_DisplayImage:
DisplayImage = strResult
Exit Function
Err_DisplayImage:
Select Case Err.Number
Case 2220 ' Can't find the picture.
ctlImageControl.Visible = False
strResult = "Can't find image in the specified name."
Resume Exit_DisplayImage:
Case Else ' Some other error.
MsgBox Err.Number amp; " " amp; Err.Description
strResult = "An error occurred displaying image."
Resume Exit_DisplayImage:
End Select
End Function
Комментарии:
1. Если вам удалось заставить это работать для одного изображения (первого), какая разница, если сделать то же самое для следующих? Почему бы вам не опубликовать код, который вы используете? Будет намного проще предложить, как ее адаптировать, вместо того, чтобы писать код с нуля… Сколько таких изображений обрабатывает ваш код? Вы хотите отобразить их все в форме? Если да, решили ли вы этот аспект?
2. я добавил приведенный выше код, который был показан в качестве образца для тестирования с northwinds. Я действительно новичок в VBA и не совсем понимаю элементы. Я также думаю, что пытаюсь создать что-то, что access, похоже, не может сделать?
3. Я думаю напомнить, что трюк с прозрачной кнопкой является единственным надежным. Однако, кажется, что вы не можете изменить макет, не имеет особого смысла; вы можете изменять макет столько, сколько пожелаете.
4. я новичок в этой области и прошу меня простить, но я испробовал все возможные способы, чтобы мои изображения перемещались по экрану, а не просто по вертикали. Форма с несколькими элементами / непрерывная форма вводит каждый элемент, но я не знаю, как заставить элементы переходить, поскольку кажется, что она просто вводит ту же запись, когда вы переходите, что и в пункте 1 и т.д. Как вы можете отредактировать, чтобы элементы 1, 2, 3 и 4 перемещались по экрану горизонтально, а не вертикально?
5. Вам нужно показать код, который использует
DisplayImage
(должно бытьDetailssection_Paint
событие). Есть ли причина не привязывать форму к запросу, содержащему путь к изображению, и не устанавливать Image-Control в это поле? У вас может быть непрерывная форма с несколькими элементами управления изображениями рядом друг с другом, затем создайте запрос, который извлекает столько путей к изображению в одной строке, сколько у вас есть элементов управления для заполнения.