Aligning graphics top left in the target cell after rotation using VBA
Dear Experts:
Below macro, courtesy of Rgonzo1971, batch inserts pictures in Column D. The network paths of these pictures are located in Column C.
The macro works just fine and I was able to tweak it a little bit ...
... i.e. I also integrated an image rotation action for certain images.
The trouble is that the images get rotated around its centers and afterwards the graphics are not aligned top left anymore as are the other pictures.
Has anybody a solution to this problem?
Help is much appreciated. Thank you very much in advance.
Regards, Andreas
Sub InsertPictures()'' by Rgonzo, EE'Dim c As RangeDim Image As Picture'For Each c In Range(Range("C2"), Range("C" & Rows.Count).End(xlUp)) c.Offset(0, 1).Activate Set Image = ActiveSheet.Pictures.Insert(c.Value2) If Image.Height > Image.Width Then Image.ShapeRange.Rotation = 90 If Image.Height > Application.CentimetersToPoints(4) Then Image.Height = Application.CentimetersToPoints(4) End If End IfNextEnd Sub
Sub InsertPictures()'' by Rgonzo, EE'Dim c As RangeDim Image As Picture'For Each c In Range(Range("C2"), Range("C" & Rows.Count).End(xlUp)) c.Offset(0, 1).Activate Set Image = ActiveSheet.Pictures.Insert(c.Value2) If Image.Height > Image.Width Then If Image.Width > Application.CentimetersToPoints(4) Then Image.Width = Application.CentimetersToPoints(4) End If Image.ShapeRange.Rotation = 90 Image.ShapeRange.IncrementTop -(Image.Height - Image.Width) / 2 Image.ShapeRange.IncrementLeft (Image.Height - Image.Width) / 2 Image.TopLeftCell.RowHeight = Image.Width Else If Image.Height > Application.CentimetersToPoints(4) Then Image.Height = Application.CentimetersToPoints(4) Image.TopLeftCell.RowHeight = Image.Height End If End If NextEnd Sub
Sub InsertPictures()
'
' by Rgonzo, EE
'
Dim c As Range
Dim Image As Picture
'
For Each c In Range(Range("C2"), Range("C" & Rows.Count).End(xlUp))
c.Offset(0, 1).Activate
Set Image = ActiveSheet.Pictures.Insert(c.Value2)
Imtop=image.top
Imleft=image.left
If Image.Height > Image.Width Then
Image.ShapeRange.Rotation = 90
If Image.Height > Application.CentimetersToPoints(4) Then
Image.Height = Application.CentimetersToPoints(4)
End If
End If
image.top=Imtop
image.left=Imleft
Next
End Sub
0
Andreas HermleTeam leaderAuthor Commented:
Hi Rgonzo,
thank you very much for your quick and professional help.
Although this looks very logical to me, it actually does not do anything.
Any idea why ?
A quick search on the internet on a similar subject produced a code snippet that -at least- repositioned the graphics to various degrees to the right (still with the top alignment)
Sub InsertPictures()'' by Rgonzo, EE' Dim c As Range Dim Image As Picture ' For Each c In Range(Range("C2"), Range("C" & Rows.Count).End(xlUp)) c.Offset(0, 1).Activate Set Image = ActiveSheet.Pictures.Insert(c.Value2) With Image If .Height > Application.CentimetersToPoints(4) Then _ .ShapeRange.ScaleHeight Application.CentimetersToPoints(4) / .Height, msoCTrue If .Height > .Width Then With .ShapeRange .Rotation = 90 .IncrementLeft .Height / 2 - .Width / 2 .IncrementTop .Width / 2 - .Height / 2 End With End If End With NextEnd Sub
Sub InsertPictures()'' by Rgonzo, EE'Dim c As RangeDim Image As Picture'For Each c In Range(Range("C2"), Range("C" & Rows.Count).End(xlUp)) c.Offset(0, 1).Activate Set Image = ActiveSheet.Pictures.Insert(c.Value2) If Image.Height > Image.Width Then If Image.Width > Application.CentimetersToPoints(4) Then Image.Width = Application.CentimetersToPoints(4) End If Image.ShapeRange.Rotation = 90 Image.ShapeRange.IncrementTop -(Image.Height - Image.Width) / 2 Image.ShapeRange.IncrementLeft (Image.Height - Image.Width) / 2 Else If Image.Height > Application.CentimetersToPoints(4) Then Image.Height = Application.CentimetersToPoints(4) End If End If NextEnd Sub
I will not have time to do thorough testing right away.
I will do some testing tomorrow.
Thank you very much for your overwhelming and professional support.
Regards, Andreas
0
Andreas HermleTeam leaderAuthor Commented:
Dear both,
thank you very much for your great and professional support. Both codes work just fine.
I am truly impressed with your coding abilities.
I hope you two find it fair if I split the points.
300 go to Rory since he was a bit quicker to answer and
200 go to Rgonzo since he provided the base parts of this code.
Again, thank you very much for your great help.
Regards, Andreas
0
Andreas HermleTeam leaderAuthor Commented:
Dear Rgonzo and rorya:
I was gonna award points when I realized there is another requirement that needs to be considered:
Is it possible to adjust the rows so that they match the size of the graphics in Column D. As you know the size of the graphics can vary wildly from 1 to 4 cm.
I could also post this question as a new post.
Regards, Andreas
0
Andreas HermleTeam leaderAuthor Commented:
Hi Rgonzo,
I have tested it on around 50 Excel Records, works great so far. I will do some more testing and then let you know. Thank you very much for your superb help.
Regards, Andreas
0
Andreas HermleTeam leaderAuthor Commented:
Thank you very much for your great and professional support.
I really appreciate it. I am so glad I can turn to this forum for real professional help.
Regards, Andreas
0
Question has a verified solution.
Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.
pls try
Open in new window