#1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 213
Default Array help

I do not understand why this code works in Excel 2003 and not in 2007?
The code is from a NG.

I have five worksheets named: "OP 10 (1), OP 10 (2), OP 10 (3), OP 20 (1)
and OP 100(1). The macro should copy all "OP 10" worksheets to the end of
worksheet "OP 10 (3)" as "OP 10 (4), OP 10 (5) and OP 10 (6)".
Being "Array Challenged", I do not understand the code very well.

'======
Sub CopySelectSheets() 'Excel 2003

Dim N As Long
Dim ShtArray() As Variant
Dim Wks As Worksheet

For Each Wks In Worksheets
If Wks.Name < "ListA" Then
If Wks.Cells(4, "D").Value = "10" Or _
Wks.Cells(4, "D").Value = "10" & " CONT" Then
N = N + 1
ReDim Preserve ShtArray(N)
ShtArray(N) = Wks.Name
End If
End If
Next Wks
MsgBox ShtArray(N) 'for testing, shows last sheet in array
If N 0 Then
Sheets(ShtArray()).Copy After:=Sheets(ShtArray(N))
'Above: Run-time error "9", subscript out of range.
End If
End Sub
'======

All input is appreciated.
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 789
Default Array help

Hi
Does this do what you want

Sub CopySelectSheets() 'Excel 2003


Dim N As Long, i As Long
Dim ShtArray() As Variant
Dim Wks As Worksheet


For Each Wks In Worksheets
If Wks.Name < "ListA" Then
If Wks.Cells(4, "D").Value = "10" Or _
Wks.Cells(4, "D").Value = "10" & " CONT" Then
N = N + 1
ReDim Preserve ShtArray(N)
ShtArray(N) = Wks.Name
End If
End If
Next Wks
MsgBox ShtArray(N) 'for testing, shows last sheet in array
If N 0 Then
For i = 1 To N
Sheets(ShtArray(i)).Copy After:=Sheets(ShtArray(N))
Next i
End If
End Sub

regards
Paul

On Feb 26, 7:54*pm, Rick S. wrote:
I do not understand why this code works in Excel 2003 and not in 2007?
The code is from a NG.

I have five worksheets named: "OP 10 (1), OP 10 (2), OP 10 (3), OP 20 (1)
and OP 100(1). *The macro should copy all "OP 10" worksheets to the end of
worksheet "OP 10 (3)" as "OP 10 (4), OP 10 (5) and OP 10 (6)".
Being "Array Challenged", I do not understand the code very well.

'======
Sub CopySelectSheets() 'Excel 2003

* Dim N As Long
* Dim ShtArray() As Variant
* Dim Wks As Worksheet

* * For Each Wks In Worksheets
* * * If Wks.Name < "ListA" Then
* * * * If Wks.Cells(4, "D").Value = "10" Or _
* * * * Wks.Cells(4, "D").Value = "10" & " CONT" Then
* * * * * *N = N + 1
* * * * * *ReDim Preserve ShtArray(N)
* * * * * *ShtArray(N) = Wks.Name
* * * * * *End If
* * * * End If
* * Next Wks
* MsgBox ShtArray(N) 'for testing, shows last sheet in array
* * If N 0 Then
* * * *Sheets(ShtArray()).Copy After:=Sheets(ShtArray(N))
* * * *'Above: Run-time error "9", subscript out of range.
* * End If
End Sub
'======

All input is appreciated.
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 213
Default Array help

Paul
Thank you for your input, the code worked but it places worksheets as in 6,
5, 4 instead of 4,5,6.
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007



" wrote:

Hi
Does this do what you want

Sub CopySelectSheets() 'Excel 2003


Dim N As Long, i As Long
Dim ShtArray() As Variant
Dim Wks As Worksheet


For Each Wks In Worksheets
If Wks.Name < "ListA" Then
If Wks.Cells(4, "D").Value = "10" Or _
Wks.Cells(4, "D").Value = "10" & " CONT" Then
N = N + 1
ReDim Preserve ShtArray(N)
ShtArray(N) = Wks.Name
End If
End If
Next Wks
MsgBox ShtArray(N) 'for testing, shows last sheet in array
If N 0 Then
For i = 1 To N
Sheets(ShtArray(i)).Copy After:=Sheets(ShtArray(N))
Next i
End If
End Sub

regards
Paul

On Feb 26, 7:54 pm, Rick S. wrote:
I do not understand why this code works in Excel 2003 and not in 2007?
The code is from a NG.

I have five worksheets named: "OP 10 (1), OP 10 (2), OP 10 (3), OP 20 (1)
and OP 100(1). The macro should copy all "OP 10" worksheets to the end of
worksheet "OP 10 (3)" as "OP 10 (4), OP 10 (5) and OP 10 (6)".
Being "Array Challenged", I do not understand the code very well.

'======
Sub CopySelectSheets() 'Excel 2003

Dim N As Long
Dim ShtArray() As Variant
Dim Wks As Worksheet

For Each Wks In Worksheets
If Wks.Name < "ListA" Then
If Wks.Cells(4, "D").Value = "10" Or _
Wks.Cells(4, "D").Value = "10" & " CONT" Then
N = N + 1
ReDim Preserve ShtArray(N)
ShtArray(N) = Wks.Name
End If
End If
Next Wks
MsgBox ShtArray(N) 'for testing, shows last sheet in array
If N 0 Then
Sheets(ShtArray()).Copy After:=Sheets(ShtArray(N))
'Above: Run-time error "9", subscript out of range.
End If
End Sub
'======

All input is appreciated.
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007



  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 35,218
Default Array help

First thing I'd change is this line:

ReDim Preserve ShtArray(N)
to:
ReDim Preserve ShtArray(1 To N)



Rick S. wrote:

I do not understand why this code works in Excel 2003 and not in 2007?
The code is from a NG.

I have five worksheets named: "OP 10 (1), OP 10 (2), OP 10 (3), OP 20 (1)
and OP 100(1). The macro should copy all "OP 10" worksheets to the end of
worksheet "OP 10 (3)" as "OP 10 (4), OP 10 (5) and OP 10 (6)".
Being "Array Challenged", I do not understand the code very well.

'======
Sub CopySelectSheets() 'Excel 2003

Dim N As Long
Dim ShtArray() As Variant
Dim Wks As Worksheet

For Each Wks In Worksheets
If Wks.Name < "ListA" Then
If Wks.Cells(4, "D").Value = "10" Or _
Wks.Cells(4, "D").Value = "10" & " CONT" Then
N = N + 1
ReDim Preserve ShtArray(N)
ShtArray(N) = Wks.Name
End If
End If
Next Wks
MsgBox ShtArray(N) 'for testing, shows last sheet in array
If N 0 Then
Sheets(ShtArray()).Copy After:=Sheets(ShtArray(N))
'Above: Run-time error "9", subscript out of range.
End If
End Sub
'======

All input is appreciated.
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007


--

Dave Peterson
  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 213
Default Array help

Dave
Thanks, that was the answer. I simply need to read more on Arrays. ;)
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007



"Dave Peterson" wrote:

First thing I'd change is this line:

ReDim Preserve ShtArray(N)
to:
ReDim Preserve ShtArray(1 To N)



Rick S. wrote:

I do not understand why this code works in Excel 2003 and not in 2007?
The code is from a NG.

I have five worksheets named: "OP 10 (1), OP 10 (2), OP 10 (3), OP 20 (1)
and OP 100(1). The macro should copy all "OP 10" worksheets to the end of
worksheet "OP 10 (3)" as "OP 10 (4), OP 10 (5) and OP 10 (6)".
Being "Array Challenged", I do not understand the code very well.

'======
Sub CopySelectSheets() 'Excel 2003

Dim N As Long
Dim ShtArray() As Variant
Dim Wks As Worksheet

For Each Wks In Worksheets
If Wks.Name < "ListA" Then
If Wks.Cells(4, "D").Value = "10" Or _
Wks.Cells(4, "D").Value = "10" & " CONT" Then
N = N + 1
ReDim Preserve ShtArray(N)
ShtArray(N) = Wks.Name
End If
End If
Next Wks
MsgBox ShtArray(N) 'for testing, shows last sheet in array
If N 0 Then
Sheets(ShtArray()).Copy After:=Sheets(ShtArray(N))
'Above: Run-time error "9", subscript out of range.
End If
End Sub
'======

All input is appreciated.
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007


--

Dave Peterson



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 3,290
Default Array help


Range("D4") on each sheet must contain "10" or "10CONT" or the sheet doesn't get copied.
--
Jim Cone
San Francisco, USA
http://www.realezsites.com/bus/primitivesoftware
(Excel Add-ins / Excel Programming)




"Rick S."
wrote in message
I do not understand why this code works in Excel 2003 and not in 2007?
The code is from a NG.

I have five worksheets named: "OP 10 (1), OP 10 (2), OP 10 (3), OP 20 (1)
and OP 100(1). The macro should copy all "OP 10" worksheets to the end of
worksheet "OP 10 (3)" as "OP 10 (4), OP 10 (5) and OP 10 (6)".
Being "Array Challenged", I do not understand the code very well.

'======
Sub CopySelectSheets() 'Excel 2003

Dim N As Long
Dim ShtArray() As Variant
Dim Wks As Worksheet

For Each Wks In Worksheets
If Wks.Name < "ListA" Then
If Wks.Cells(4, "D").Value = "10" Or _
Wks.Cells(4, "D").Value = "10" & " CONT" Then
N = N + 1
ReDim Preserve ShtArray(N)
ShtArray(N) = Wks.Name
End If
End If
Next Wks
MsgBox ShtArray(N) 'for testing, shows last sheet in array
If N 0 Then
Sheets(ShtArray()).Copy After:=Sheets(ShtArray(N))
'Above: Run-time error "9", subscript out of range.
End If
End Sub
'======

All input is appreciated.
--
Regards

VBA.Newb.Confused
XP Pro
Office 2007

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
Prevent cell/array references from changing when altering/moving thecell/array nme Excel Discussion (Misc queries) 1 September 19th 08 01:53 PM
Redimming an array dynamically assigned from range (how to redim first dimension of a 2-D array? /or/ reverse the original array order) Keith R[_2_] Excel Programming 3 November 13th 07 04:08 PM
meaning of : IF(Switch; Average(array A, array B); array A) DXAT Excel Worksheet Functions 1 October 24th 06 06:11 PM
Array problem: Key words-Variant Array, single-element, type mismatch error davidm Excel Programming 6 November 9th 05 05:54 AM
Array problem: Key words-Variant Array, single-element, type mismatch error davidm Excel Programming 1 November 8th 05 04:21 AM


All times are GMT +1. The time now is 01:59 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"