Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi,
I have the following code Sub InsertPictureInRange(PictureFileName As String, TargetCells As Range) ' inserts a picture and resizes it to fit the TargetCells range Dim p As Object, t As Double, l As Double, w As Double, h As Double If TypeName(ActiveSheet) < "Worksheet" Then Exit Sub If Dir(PictureFileName) = "" Then Exit Sub ' import picture Set p = ActiveSheet.Pictures.Insert(PictureFileName) ' determine positions With TargetCells t = .Top l = .Left w = .Offset(0, .Columns.Count).Left - .Left h = .Offset(.Rows.Count, 0).Top - .Top End With ' position picture With p .Top = t .Left = l .Width = w .Height = h End With Set p = Nothing End Sub This works just fine. However, If I add more than one shape to a sheet, then subsequently delete a shape using the code below, other shapes on the same worksheet move a little. Sub DeletePicture(TargetCells As Range) Dim pict As Object Dim t As Double Dim l As Double Application.ScreenUpdating = False ' determine positions With TargetCells t = .Top l = .Left End With For Each pict In ActiveSheet.Shapes On Error Resume Next pict.Select If Round(pict.Left, 2) = Round(l, 2) And Round(pict.Top, 2) = Round(t, 2) Then pict.Delete End If Next Application.ScreenUpdating = True End Sub Any suggestions to improve the code, so that each shape is "locked in place" when it is added ? Thanks in advance. |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Try maximize your excel window and the spreadsheet inside of excel. Your code isn't moving anything so I think the actual window is resizing. -- joel ------------------------------------------------------------------------ joel's Profile: http://www.thecodecage.com/forumz/member.php?userid=229 View this thread: http://www.thecodecage.com/forumz/sh...d.php?t=157392 Microsoft Office Help |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
No need to Select your pictures. Here's a different approach -
Sub DeletePicture2(TargetCells As Range) Dim pic As Picture For Each pic In ActiveSheet.Pictures If Not Intersect(TargetCells, pic.TopLeftCell) Is Nothing Then pic.Delete End If Next End Sub If You want to delete all shapes whose topLeftCell is in the target change 'As Picture' to As Shape' and 'ActiveSheet.Pictures' to 'ActiveSheet.Shapes' Regards, Peter T "Gary B" wrote in message ... Hi, I have the following code Sub InsertPictureInRange(PictureFileName As String, TargetCells As Range) ' inserts a picture and resizes it to fit the TargetCells range Dim p As Object, t As Double, l As Double, w As Double, h As Double If TypeName(ActiveSheet) < "Worksheet" Then Exit Sub If Dir(PictureFileName) = "" Then Exit Sub ' import picture Set p = ActiveSheet.Pictures.Insert(PictureFileName) ' determine positions With TargetCells t = .Top l = .Left w = .Offset(0, .Columns.Count).Left - .Left h = .Offset(.Rows.Count, 0).Top - .Top End With ' position picture With p .Top = t .Left = l .Width = w .Height = h End With Set p = Nothing End Sub This works just fine. However, If I add more than one shape to a sheet, then subsequently delete a shape using the code below, other shapes on the same worksheet move a little. Sub DeletePicture(TargetCells As Range) Dim pict As Object Dim t As Double Dim l As Double Application.ScreenUpdating = False ' determine positions With TargetCells t = .Top l = .Left End With For Each pict In ActiveSheet.Shapes On Error Resume Next pict.Select If Round(pict.Left, 2) = Round(l, 2) And Round(pict.Top, 2) = Round(t, 2) Then pict.Delete End If Next Application.ScreenUpdating = True End Sub Any suggestions to improve the code, so that each shape is "locked in place" when it is added ? Thanks in advance. |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks for that.
Your code did not delete my shape, but I did remove my line that was selecting the shape before deletion. That has worked a treat - simply don't select the shape. Your guidance was most helpful. "Peter T" wrote: No need to Select your pictures. Here's a different approach - Sub DeletePicture2(TargetCells As Range) Dim pic As Picture For Each pic In ActiveSheet.Pictures If Not Intersect(TargetCells, pic.TopLeftCell) Is Nothing Then pic.Delete End If Next End Sub If You want to delete all shapes whose topLeftCell is in the target change 'As Picture' to As Shape' and 'ActiveSheet.Pictures' to 'ActiveSheet.Shapes' Regards, Peter T "Gary B" wrote in message ... Hi, I have the following code Sub InsertPictureInRange(PictureFileName As String, TargetCells As Range) ' inserts a picture and resizes it to fit the TargetCells range Dim p As Object, t As Double, l As Double, w As Double, h As Double If TypeName(ActiveSheet) < "Worksheet" Then Exit Sub If Dir(PictureFileName) = "" Then Exit Sub ' import picture Set p = ActiveSheet.Pictures.Insert(PictureFileName) ' determine positions With TargetCells t = .Top l = .Left w = .Offset(0, .Columns.Count).Left - .Left h = .Offset(.Rows.Count, 0).Top - .Top End With ' position picture With p .Top = t .Left = l .Width = w .Height = h End With Set p = Nothing End Sub This works just fine. However, If I add more than one shape to a sheet, then subsequently delete a shape using the code below, other shapes on the same worksheet move a little. Sub DeletePicture(TargetCells As Range) Dim pict As Object Dim t As Double Dim l As Double Application.ScreenUpdating = False ' determine positions With TargetCells t = .Top l = .Left End With For Each pict In ActiveSheet.Shapes On Error Resume Next pict.Select If Round(pict.Left, 2) = Round(l, 2) And Round(pict.Top, 2) = Round(t, 2) Then pict.Delete End If Next Application.ScreenUpdating = True End Sub Any suggestions to improve the code, so that each shape is "locked in place" when it is added ? Thanks in advance. . |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I just tested the code as posted and it should delete any or all Pictures
whose topLeftCell is within the target range "TargetCells". Not sure why it doesn't for you, no matter, glad you got it working for your needs. Regards, Peter T "Gary B" wrote in message ... Thanks for that. Your code did not delete my shape, but I did remove my line that was selecting the shape before deletion. That has worked a treat - simply don't select the shape. Your guidance was most helpful. "Peter T" wrote: No need to Select your pictures. Here's a different approach - Sub DeletePicture2(TargetCells As Range) Dim pic As Picture For Each pic In ActiveSheet.Pictures If Not Intersect(TargetCells, pic.TopLeftCell) Is Nothing Then pic.Delete End If Next End Sub If You want to delete all shapes whose topLeftCell is in the target change 'As Picture' to As Shape' and 'ActiveSheet.Pictures' to 'ActiveSheet.Shapes' Regards, Peter T "Gary B" wrote in message ... Hi, I have the following code Sub InsertPictureInRange(PictureFileName As String, TargetCells As Range) ' inserts a picture and resizes it to fit the TargetCells range Dim p As Object, t As Double, l As Double, w As Double, h As Double If TypeName(ActiveSheet) < "Worksheet" Then Exit Sub If Dir(PictureFileName) = "" Then Exit Sub ' import picture Set p = ActiveSheet.Pictures.Insert(PictureFileName) ' determine positions With TargetCells t = .Top l = .Left w = .Offset(0, .Columns.Count).Left - .Left h = .Offset(.Rows.Count, 0).Top - .Top End With ' position picture With p .Top = t .Left = l .Width = w .Height = h End With Set p = Nothing End Sub This works just fine. However, If I add more than one shape to a sheet, then subsequently delete a shape using the code below, other shapes on the same worksheet move a little. Sub DeletePicture(TargetCells As Range) Dim pict As Object Dim t As Double Dim l As Double Application.ScreenUpdating = False ' determine positions With TargetCells t = .Top l = .Left End With For Each pict In ActiveSheet.Shapes On Error Resume Next pict.Select If Round(pict.Left, 2) = Round(l, 2) And Round(pict.Top, 2) = Round(t, 2) Then pict.Delete End If Next Application.ScreenUpdating = True End Sub Any suggestions to improve the code, so that each shape is "locked in place" when it is added ? Thanks in advance. . |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
adding formulas to shapes in excel | Excel Discussion (Misc queries) | |||
Adding Shapes to Spreadsheets | Excel Discussion (Misc queries) | |||
adding formulas to shapes in excel | Excel Discussion (Misc queries) | |||
adding shapes to forms | Excel Programming | |||
Adding shapes to xy scatter charts | Excel Programming |