Forum Discussion
LizeMarie
Dec 13, 2022Brass Contributor
Load Image from path into Image ActiveX Control in worksheet
I have the following code: Private Sub img_Browse_Click()On Error Resume Next Dim img As String Dim xCmpPath As String img = Application.GetOpenFilename If img <> False Then Me.img_Photo.Pic...
- Dec 13, 2022
In such situations, you should temporarily comment out the line
On Error Resume Next
because with it, you won't be notified of any errors.
You declare img as a String, but a String cannot be False. The line
If img <> False Then
causes a Type Mismatch error.
You should declare img as a Variant. That allows it to be any type, whether Boolean (False) or String (a file path).
In the second place, as far as I know, you cannot change the picture on an existing picture shape. You have to delete the existing picture and insert a new one.
Try this version - make sure that there is a shape (any shape) named img_Photo on Sheet3.
Private Sub img_Browse() Dim img As Variant Dim shp As Shape Dim x As Single Dim y As Single Dim w As Single Dim h As Single Dim xCmpPath As String 'On Error Resume Next img = Application.GetOpenFilename(FileFilter:= _ "Pictures (*.jpg;*.png;*.gif;*.bmp),*.jpg;*.png;*.gif;*.bmp") If img <> False Then Set shp = Sheet3.Shapes("img_Photo") x = shp.Left y = shp.Top w = shp.Width h = shp.Height shp.Delete Set shp = Sheet3.Shapes.AddPicture(img, False, True, x, y, h, w) shp.Name = "img_Photo" xCmpPath = img Sheet1.Range("AE1").FormulaR1C1 = xCmpPath End If End Sub
HansVogelaar
Dec 13, 2022MVP
In such situations, you should temporarily comment out the line
On Error Resume Next
because with it, you won't be notified of any errors.
You declare img as a String, but a String cannot be False. The line
If img <> False Then
causes a Type Mismatch error.
You should declare img as a Variant. That allows it to be any type, whether Boolean (False) or String (a file path).
In the second place, as far as I know, you cannot change the picture on an existing picture shape. You have to delete the existing picture and insert a new one.
Try this version - make sure that there is a shape (any shape) named img_Photo on Sheet3.
Private Sub img_Browse()
Dim img As Variant
Dim shp As Shape
Dim x As Single
Dim y As Single
Dim w As Single
Dim h As Single
Dim xCmpPath As String
'On Error Resume Next
img = Application.GetOpenFilename(FileFilter:= _
"Pictures (*.jpg;*.png;*.gif;*.bmp),*.jpg;*.png;*.gif;*.bmp")
If img <> False Then
Set shp = Sheet3.Shapes("img_Photo")
x = shp.Left
y = shp.Top
w = shp.Width
h = shp.Height
shp.Delete
Set shp = Sheet3.Shapes.AddPicture(img, False, True, x, y, h, w)
shp.Name = "img_Photo"
xCmpPath = img
Sheet1.Range("AE1").FormulaR1C1 = xCmpPath
End If
End Sub
LizeMarie
Dec 14, 2022Brass Contributor
HansVogelaar Hans img_Photo is an ActiveX Control Image is it possible to keep the Picture Alignment as fmPictureAlignmentCentre and PictureSizeMode to fmPictureSizeModeZoom?
Thank you
Kind Regards
- HansVogelaarDec 14, 2022MVP
For an ActiveX image control, it's actually easier:
Private Sub img_Browse() Dim img As Variant 'On Error Resume Next img = Application.GetOpenFilename(FileFilter:= _ "Pictures (*.jpg;*.png;*.gif;*.bmp),*.jpg;*.png;*.gif;*.bmp") If img <> False Then With Sheet3.img_Photo .Picture = LoadPicture(img) .PictureAlignment = fmPictureAlignmentCenter .PictureSizeMode = fmPictureSizeModeZoom End With Sheet1.Range("AE1").Value = img End If End Sub
- LizeMarieDec 14, 2022Brass Contributor🙂 You really helped me allot this past few days and I really appreciate it allot. Thank you