UPDATE
There’s finally an official update from Microsoft to fix the problem, see: http://www.devhut.net/2015/12/08/finally-a-fix-for-the-images-not-showing-in-forms-and-report-for-access-2016/ for all the details and links.
There has been a MAJOR screw up and sadly we are seeing countless posts/questions regarding images not showing up in forms/reports. Sadly, even several months after being flagged, we are still waiting upon an official fix from Microsoft! 🙁
Proposed Solution 1
One proposed solution is to set your database options (File -> Options -> Current Database)
and then reinsert all your images, but this will still not help if you are working with bmp images, so you’d need to ensure they are of another image format first.
Proposed Solution 2
Another fix has been to simply change the image’s Size Mode to Stretch or Clip and changing the Picture Type to Linked. In many cases, it was as simple as that.
Below is the beginning of code to loop through all the forms and reports within a database and switch the properties in question. The issue being that one way or another, you will still need to manually intervene since by switching them from Embedded to Linked, you will need to supply a path/filename.
'---------------------------------------------------------------------------------------
' Procedure : FixImages
' Author : Daniel Pineault, CARDA Consultants Inc.
' Website : http://www.cardaconsultants.com
' Purpose : Try to start fixing MS' mess with images
' Copyright : The following may be altered and reused as you wish so long as the
' copyright notice is left unchanged (including Author, Website and
' Copyright). It may not be sold/resold or reposted on other sites (links
' back to this site are allowed).
'
' Revision History:
' Rev Date(yyyy/mm/dd) Description
' **************************************************************************************
' 1 2015-11-30 Initial Release
'---------------------------------------------------------------------------------------
Sub FixImages()
On Error GoTo Error_Handler
Dim DbO As AccessObject
Dim DbP As Object
Dim frm As Access.Form
Dim rpt As Access.Report
Dim ctl As Access.Control
Set DbP = Application.CurrentProject
'Review/Fix Forms
Debug.Print "Processing Forms"
Debug.Print "~~~~~~~~~~~~~~~~"
For Each DbO In DbP.AllForms
Debug.Print vbTab & DbO.Name
DoCmd.OpenForm DbO.Name, acDesign 'Open the form in design view so we can work with it
Set frm = Forms(DbO.Name)
With frm
For Each ctl In .Controls 'Loop through all of the controls
If ctl.ControlType = acImage Then 'If an image control is found then apply our settings
Debug.Print vbTab & vbTab & ctl.Name
ctl.SizeMode = acOLESizeClip 'could also be acOLESizeStretch - https://msdn.microsoft.com/en-us/library/office/ff837281(v=office.15).aspx
ctl.PictureType = 1 '0 would be embedded - https://msdn.microsoft.com/en-us/library/office/ff197027(v=office.15).aspx
End If
Next
End With
DoCmd.Close acForm, DbO.Name, acSaveYes 'Close and save our changes
Next DbO
'Review/Fix Reports
Debug.Print "Processing Reports"
Debug.Print "~~~~~~~~~~~~~~~~"
For Each DbO In DbP.AllReports
Debug.Print vbTab & DbO.Name
DoCmd.OpenReport DbO.Name, acDesign 'Open the report in design view so we can work with it
Set rpt = Reports(DbO.Name)
With rpt
For Each ctl In .Controls 'Loop through all of the controls
If ctl.ControlType = acImage Then 'If an image control is found then apply our settings
Debug.Print vbTab & vbTab & ctl.Name
ctl.SizeMode = acOLESizeClip 'could also be acOLESizeStretch - https://msdn.microsoft.com/en-us/library/office/ff837281(v=office.15).aspx
ctl.PictureType = 1 '0 would be embedded - https://msdn.microsoft.com/en-us/library/office/ff197027(v=office.15).aspx
End If
Next
End With
DoCmd.Close acReport, DbO.Name, acSaveYes 'Close and save our changes
Next DbO
Debug.Print "Operation Complete!"
Error_Handler_Exit:
On Error Resume Next
Set ctl = Nothing
Set frm = Nothing
Set rpt = Nothing
Set DbO = Nothing
Set DbP = Nothing
Exit Sub
Error_Handler:
MsgBox "The following error has occurred." & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: FixImages" & vbCrLf & _
"Error Description: " & Err.Description, _
vbCritical, "An Error has Occurred!"
Resume Error_Handler_Exit
End Sub
What might also be useful is a simple procedure to quickly identify the problematic forms and reports. Below is such a procedure, it will loop through all the forms and reports looking for the specified control type; in our case acImage.
'---------------------------------------------------------------------------------------
' Procedure : IdentifyImageObjects
' Author : Daniel Pineault, CARDA Consultants Inc.
' Website : http://www.cardaconsultants.com
' Purpose : Identify Forms/Reports with the specified control type
' Copyright : The following may be altered and reused as you wish so long as the
' copyright notice is left unchanged (including Author, Website and
' Copyright). It may not be sold/resold or reposted on other sites (links
' back to this site are allowed).
'
' Usage : Call IdentifyImageObjects(acImage)
' : Call IdentifyImageObjects(acLabel)
'
' Revision History:
' Rev Date(yyyy/mm/dd) Description
' **************************************************************************************
' 1 2015-11-30 Initial Release
'---------------------------------------------------------------------------------------
Sub IdentifyImageObjects(sCtlType As AcControlType, Optional bLeaveOpen As Boolean = True)
On Error GoTo Error_Handler
Dim DbO As AccessObject
Dim DbP As Object
Dim frm As Access.Form
Dim rpt As Access.Report
Dim ctl As Access.Control
Dim bCtlTypeFound As Boolean
Set DbP = Application.CurrentProject
'Review/Fix Forms
Debug.Print "Processing Forms"
Debug.Print "~~~~~~~~~~~~~~~~"
For Each DbO In DbP.AllForms
bCtlTypeFound = False
DoCmd.OpenForm DbO.Name, acDesign 'Open the form in design view so we can work with it
Set frm = Forms(DbO.Name)
With frm
For Each ctl In .Controls 'Loop through all of the controls
If ctl.ControlType = sCtlType Then 'If an image control is found then apply our settings
bCtlTypeFound = True
Exit For 'Stop the loop once we find 1 instance of the Control Type we are searching for
End If
Next
End With
If bCtlTypeFound = True Then
Debug.Print vbTab & DbO.Name
If bLeaveOpen = False Then DoCmd.Close acForm, DbO.Name, acSaveNo
Else
DoCmd.Close acForm, DbO.Name, acSaveNo
End If
Next DbO
'Review/Fix Reports
Debug.Print "Processing Reports"
Debug.Print "~~~~~~~~~~~~~~~~"
For Each DbO In DbP.AllReports
bCtlTypeFound = False
DoCmd.OpenReport DbO.Name, acDesign 'Open the report in design view so we can work with it
Set rpt = Reports(DbO.Name)
With rpt
For Each ctl In .Controls 'Loop through all of the controls
If ctl.ControlType = sCtlType Then 'If an image control is found then apply our settings
bCtlTypeFound = True
Exit For 'Stop the loop once we find 1 instance of the Control Type we are searching for
End If
Next
End With
If bCtlTypeFound = True Then
Debug.Print vbTab & DbO.Name
If bLeaveOpen = False Then DoCmd.Close acReport, DbO.Name, acSaveNo
Else
DoCmd.Close acReport, DbO.Name, acSaveNo
End If
Next DbO
Debug.Print "Operation Complete!"
Error_Handler_Exit:
On Error Resume Next
Set ctl = Nothing
Set frm = Nothing
Set rpt = Nothing
Set DbO = Nothing
Set DbP = Nothing
Exit Sub
Error_Handler:
MsgBox "The following error has occurred." & vbCrLf & vbCrLf & _
"Error Number: " & Err.Number & vbCrLf & _
"Error Source: IdentifyImageObjects" & vbCrLf & _
"Error Description: " & Err.Description, _
vbCritical, "An Error has Occurred!"
Resume Error_Handler_Exit
End Sub
Proposed Solution 3
I also found an interesting statement (taken from: http://answers.microsoft.com/en-us/office/forum/office_365hp-access/embedded-images-disappeared-after-upgrade-to/2c84727f-89e8-48f8-9096-eb330379d4c6?page=1) in which user sLaeYa says:
If you export your Form:
- Right Click on the Form in Navigation Pane
- Select Export to XML File
- Choose Destination
- Select Data and Presentation
In the destination folder there is an images folder, you will find that the names of your main embedded image has changed to “Form_Name.BMP”
If you change the file name to the new one it starts working again.
I cannot confirm or deny this claim as I haven’t had the time to test it out yet. Feel free to leave a comment should you have any more relevant information on the subject.


