Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 181
Default XL2002 - Select All Objects in an Array...

I have some code that draws a variable amount of lines to a worksheet. Each
time a line is drawn it is given a sequential name (myShelf1, myShelf2...
etc) and the width of the line changed to a value specified on the worksheet.

Here's what I need...
1. I need to be able to start the lines at the edge of a pre-defined
rectangle called myFixture.

2. I need to be able to select all lines that are called myShelf*, plus 2
other pre-defined lines (myShelfTop & myShelfBottom), and then distribute
them vertically.

As usual, any help greatly appreciated.

my code so far...

----------------------------
Sub AddShelves()

'clear current shelves
For Each shp In ActiveSheet.Shapes
If shp.Name Like "myShelf*" Then
shp.Delete
End If
Next shp

'add new shelves
For i = 1 To Range("D17").Value 'this is how many lines to add
With ActiveSheet
.Shapes.AddLine(335.25, 127.5, 623.25, 127.5).Name = ("myShelf") & i
.Shapes("myShelf" & i).Width = Range("myLength")
End With
Next i

'distribute shelves - ShelfTop & ShelfBottom are predefined
ActiveSheet.Shapes.Range(Array("ShelfTop", "ShelfBottom", "myShelf1",
"myShelf2", "myShelf3")) _
.Distribute msoDistributeVertically, False

End Sub
------------------------
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default XL2002 - Select All Objects in an Array...

Hi Trevor,

It seems rasther a haphazard way of positioning your shapes, would have
thought you could set your positions in the loop in the 'AddLine' arguments.
Anyway, have a go with this -

Sub AddShelves()
Dim shp As Shape
'clear current shelves
For Each shp In ActiveSheet.Shapes
If shp.Name Like "myShelf*" Then
shp.Delete
End If
Next shp

' ought verify ShelfTop & ShelfBottom exist
ReDim arr(0 To Range("D17") + 1)
arr(0) = ActiveSheet.Shapes("ShelfTop").ZOrderPosition
arr(1) = ActiveSheet.Shapes("ShelfBottom").ZOrderPosition

'add new shelves
For i = 1 To Range("D17").Value 'this is how many lines to add
With ActiveSheet
With .Shapes.AddLine(35.25, 27.5, 123.25, 127.5)
.Name = ("myShelf") & i
.Width = Range("myLength") ' why this and not in 'AddLine'
arr(i + 1) = .ZOrderPosition
End With
End With
Next i

'distribute shelves - ShelfTop & ShelfBottom are predefined
'ActiveSheet.Shapes.Range(Array("ShelfTop", "ShelfBottom", "myShelf1",
"myShelf2", "myShelf3")) _
.Distribute msoDistributeVertically, False
ActiveSheet.Shapes.Range(arr) _
.Distribute msoDistributeVertically, False
End Sub

Changing respective ZOrderPosition's and place in the array may give
different results

Regards,
Peter T


"Trevor Williams" wrote in
message ...
I have some code that draws a variable amount of lines to a worksheet.

Each
time a line is drawn it is given a sequential name (myShelf1, myShelf2...
etc) and the width of the line changed to a value specified on the

worksheet.

Here's what I need...
1. I need to be able to start the lines at the edge of a pre-defined
rectangle called myFixture.

2. I need to be able to select all lines that are called myShelf*, plus 2
other pre-defined lines (myShelfTop & myShelfBottom), and then distribute
them vertically.

As usual, any help greatly appreciated.

my code so far...

----------------------------
Sub AddShelves()

'clear current shelves
For Each shp In ActiveSheet.Shapes
If shp.Name Like "myShelf*" Then
shp.Delete
End If
Next shp

'add new shelves
For i = 1 To Range("D17").Value 'this is how many lines to add
With ActiveSheet
.Shapes.AddLine(335.25, 127.5, 623.25, 127.5).Name = ("myShelf") &

i
.Shapes("myShelf" & i).Width = Range("myLength")
End With
Next i

'distribute shelves - ShelfTop & ShelfBottom are predefined
ActiveSheet.Shapes.Range(Array("ShelfTop", "ShelfBottom", "myShelf1",
"myShelf2", "myShelf3")) _
.Distribute msoDistributeVertically, False

End Sub
------------------------



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default XL2002 - Select All Objects in an Array...

PS
I changed your
.Shapes.AddLine(335.25, 127.5, 623.25, 127.5).

to
..Shapes.AddLine(35.25, 27.5, 123.25, 127.5)

so I could see them !

Peter T


  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 181
Default XL2002 - Select All Objects in an Array...

Hi Peter

Do you know how to return the Begin x, Begin y, End x, End y values of an
object that already exists on a sheet?

Thanks

Trevor

"Peter T" wrote:

PS
I changed your
.Shapes.AddLine(335.25, 127.5, 623.25, 127.5).

to
..Shapes.AddLine(35.25, 27.5, 123.25, 127.5)

so I could see them !

Peter T



  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default XL2002 - Select All Objects in an Array...

If you mean what I think you mean, and specifically for a Line, I posted an
example how to do that -

http://tinyurl.com/yuevs2

Regards,
Peter T

"Trevor Williams" wrote in
message ...
Hi Peter

Do you know how to return the Begin x, Begin y, End x, End y values of an
object that already exists on a sheet?

Thanks

Trevor

"Peter T" wrote:

PS
I changed your
.Shapes.AddLine(335.25, 127.5, 623.25, 127.5).

to
..Shapes.AddLine(35.25, 27.5, 123.25, 127.5)

so I could see them !

Peter T







  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 181
Default XL2002 - Select All Objects in an Array...

Hi Peter - thanks for your response, it works a treat.

It makes sense to define the Width of the line in the AddLine statement, so
I'll get cracking on that.

Thanks agin.

Trevor

"Peter T" wrote:

Hi Trevor,

It seems rasther a haphazard way of positioning your shapes, would have
thought you could set your positions in the loop in the 'AddLine' arguments.
Anyway, have a go with this -

Sub AddShelves()
Dim shp As Shape
'clear current shelves
For Each shp In ActiveSheet.Shapes
If shp.Name Like "myShelf*" Then
shp.Delete
End If
Next shp

' ought verify ShelfTop & ShelfBottom exist
ReDim arr(0 To Range("D17") + 1)
arr(0) = ActiveSheet.Shapes("ShelfTop").ZOrderPosition
arr(1) = ActiveSheet.Shapes("ShelfBottom").ZOrderPosition

'add new shelves
For i = 1 To Range("D17").Value 'this is how many lines to add
With ActiveSheet
With .Shapes.AddLine(35.25, 27.5, 123.25, 127.5)
.Name = ("myShelf") & i
.Width = Range("myLength") ' why this and not in 'AddLine'
arr(i + 1) = .ZOrderPosition
End With
End With
Next i

'distribute shelves - ShelfTop & ShelfBottom are predefined
'ActiveSheet.Shapes.Range(Array("ShelfTop", "ShelfBottom", "myShelf1",
"myShelf2", "myShelf3")) _
.Distribute msoDistributeVertically, False
ActiveSheet.Shapes.Range(arr) _
.Distribute msoDistributeVertically, False
End Sub

Changing respective ZOrderPosition's and place in the array may give
different results

Regards,
Peter T


"Trevor Williams" wrote in
message ...
I have some code that draws a variable amount of lines to a worksheet.

Each
time a line is drawn it is given a sequential name (myShelf1, myShelf2...
etc) and the width of the line changed to a value specified on the

worksheet.

Here's what I need...
1. I need to be able to start the lines at the edge of a pre-defined
rectangle called myFixture.

2. I need to be able to select all lines that are called myShelf*, plus 2
other pre-defined lines (myShelfTop & myShelfBottom), and then distribute
them vertically.

As usual, any help greatly appreciated.

my code so far...

----------------------------
Sub AddShelves()

'clear current shelves
For Each shp In ActiveSheet.Shapes
If shp.Name Like "myShelf*" Then
shp.Delete
End If
Next shp

'add new shelves
For i = 1 To Range("D17").Value 'this is how many lines to add
With ActiveSheet
.Shapes.AddLine(335.25, 127.5, 623.25, 127.5).Name = ("myShelf") &

i
.Shapes("myShelf" & i).Width = Range("myLength")
End With
Next i

'distribute shelves - ShelfTop & ShelfBottom are predefined
ActiveSheet.Shapes.Range(Array("ShelfTop", "ShelfBottom", "myShelf1",
"myShelf2", "myShelf3")) _
.Distribute msoDistributeVertically, False

End Sub
------------------------




Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Cannot select objects Blue Max New Users to Excel 6 March 23rd 09 12:47 PM
Select Objects cursor Learning Excel 2007 Excel Discussion (Misc queries) 2 May 2nd 07 05:09 PM
how can I select multiple drawing objects at once ExcelUser Excel Discussion (Misc queries) 1 February 11th 05 10:42 AM
The Select Objects button Max Power Excel Programming 1 November 30th 04 12:55 PM
Select Multiple Shape Objects Alan Excel Programming 0 November 24th 04 06:25 AM


All times are GMT +1. The time now is 08:04 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"