PC Review


Reply
Thread Tools Rate Thread

Assigning to an array

 
 
Geoff
Guest
Posts: n/a
 
      13th Jun 2008
I would like to run the same code over a number of worksheets, and to this
end I've declared a static array as follows:

Dim tmpBk As Workbook
Dim wsArr(1 To 8) As String
Dim wsName As String
Dim tmpWs As Worksheet
Dim tmpRng As Range
Dim dataName As String
Dim firstDay As Date

firstDay = DateSerial(yr, mth, 1)
dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
Workbooks.Open dataName, 0, True
wsArr = Array("Value1", "Value2", "Value3", "Value4", _
"Value5", "Value6", "Value7", "Value8")

Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
For Each wsName In wsArr
Set tmpWs = tmpBk.Worksheets(wsName)
[snip]
Next wsName

When I try to compile this I get the error "Can't assign to array". I know I
could go through one by one and assign the values by saying
wsArr(1) = Value1
for instance but I'd like to get them all done at once.

Any suggestions?

TIA
--
There are 10 types of people in the world - those who understand binary and
those who don't.
 
Reply With Quote
 
 
 
 
Gary''s Student
Guest
Posts: n/a
 
      13th Jun 2008
Remove:
Dim wsArr(1 To 8) As String
--
Gary''s Student - gsnu200791
 
Reply With Quote
 
Doug Glancy
Guest
Posts: n/a
 
      13th Jun 2008
Geoff,

Try this:

Dim tmpBk As Workbook
Dim wsArr As Variant
Dim tmpWs As Worksheet
Dim tmpRng As Range
Dim dataName As String
Dim firstDay As Date

firstDay = DateSerial(yr, mth, 1)
dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
Workbooks.Open dataName, 0, True
Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
Set wsArr = tmpBk.Worksheets(Array("Value1", "Value2", "Value3", "Value4",
"Value5", "Value6", "Value7", "Value8"))
For Each tmpWs In wsArr
'[snip]
Next tmpWs

hth,

Doug

"Geoff" <(E-Mail Removed)> wrote in message
news:82342CC5-A8E9-4AA5-A299-(E-Mail Removed)...
>I would like to run the same code over a number of worksheets, and to this
> end I've declared a static array as follows:
>
> Dim tmpBk As Workbook
> Dim wsArr(1 To 8) As String
> Dim wsName As String
> Dim tmpWs As Worksheet
> Dim tmpRng As Range
> Dim dataName As String
> Dim firstDay As Date
>
> firstDay = DateSerial(yr, mth, 1)
> dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
> Workbooks.Open dataName, 0, True
> wsArr = Array("Value1", "Value2", "Value3", "Value4", _
> "Value5", "Value6", "Value7", "Value8")
>
> Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
> For Each wsName In wsArr
> Set tmpWs = tmpBk.Worksheets(wsName)
> [snip]
> Next wsName
>
> When I try to compile this I get the error "Can't assign to array". I know
> I
> could go through one by one and assign the values by saying
> wsArr(1) = Value1
> for instance but I'd like to get them all done at once.
>
> Any suggestions?
>
> TIA
> --
> There are 10 types of people in the world - those who understand binary
> and
> those who don't.



 
Reply With Quote
 
Alan Beban
Guest
Posts: n/a
 
      13th Jun 2008
If the functions in the freely downloadable file at
http://home.pacbel.net/beban are available to your workbook

Dim wsArr() As String
ReDim wsArr(0 To 0)
Assign Array("Value1", "Value2", "Value3", "Value4", "Value5", _
"Value6", "Value7", "Value8"), wsArr

Alan Beban

Geoff wrote:
> I would like to run the same code over a number of worksheets, and to this
> end I've declared a static array as follows:
>
> Dim tmpBk As Workbook
> Dim wsArr(1 To 8) As String
> Dim wsName As String
> Dim tmpWs As Worksheet
> Dim tmpRng As Range
> Dim dataName As String
> Dim firstDay As Date
>
> firstDay = DateSerial(yr, mth, 1)
> dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
> Workbooks.Open dataName, 0, True
> wsArr = Array("Value1", "Value2", "Value3", "Value4", _
> "Value5", "Value6", "Value7", "Value8")
>
> Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
> For Each wsName In wsArr
> Set tmpWs = tmpBk.Worksheets(wsName)
> [snip]
> Next wsName
>
> When I try to compile this I get the error "Can't assign to array". I know I
> could go through one by one and assign the values by saying
> wsArr(1) = Value1
> for instance but I'd like to get them all done at once.
>
> Any suggestions?
>
> TIA

 
Reply With Quote
 
Geoff
Guest
Posts: n/a
 
      13th Jun 2008
Thanks Doug,

that's pretty similar to what I ended up doing:

Dim tmpBk As Workbook
Dim wsArr
Dim i As Integer
Dim tmpWs As Worksheet
Dim tmpRng As Range
Dim dataName As String
Dim firstDay As Date

firstDay = DateSerial(yr, mth, 1)
dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
Workbooks.Open dataName, 0, True
wsArr = Array("Value1", "Value2", "Value3", "Value4", _
"Value5", "Value6", "Value7", "Value8")
Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
For i = LBound(wsArr) To UBound(wsArr)
Set tmpWs = tmpBk.Worksheets(wsArr(i))
[snip]
Next i

Do you think there's anything to be gained (performance-wise) by using
static arrays? I guess this was the thinking that led me to the approach of
declaring the array to begin with. Just to put it in context, I am
refactoring/rewriting a lot of the code in a legacy project (originally
written for XL97) here. The old sub selected all the sheets at once to run
the code over them, as well as opening up a lot of source workbooks
unnecessarily, and eventually this led to Excel running out of memory while
running this particular macro, so I guess I would like to try to improve
performance as much as possible.

Thanks
Geoff
--
There are 10 types of people in the world - those who understand binary and
those who don't.


"Doug Glancy" wrote:

> Geoff,
>
> Try this:
>
> Dim tmpBk As Workbook
> Dim wsArr As Variant
> Dim tmpWs As Worksheet
> Dim tmpRng As Range
> Dim dataName As String
> Dim firstDay As Date
>
> firstDay = DateSerial(yr, mth, 1)
> dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
> Workbooks.Open dataName, 0, True
> Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
> Set wsArr = tmpBk.Worksheets(Array("Value1", "Value2", "Value3", "Value4",
> "Value5", "Value6", "Value7", "Value8"))
> For Each tmpWs In wsArr
> '[snip]
> Next tmpWs
>
> hth,
>
> Doug
>
> "Geoff" <(E-Mail Removed)> wrote in message
> news:82342CC5-A8E9-4AA5-A299-(E-Mail Removed)...
> >I would like to run the same code over a number of worksheets, and to this
> > end I've declared a static array as follows:
> >
> > Dim tmpBk As Workbook
> > Dim wsArr(1 To 8) As String
> > Dim wsName As String
> > Dim tmpWs As Worksheet
> > Dim tmpRng As Range
> > Dim dataName As String
> > Dim firstDay As Date
> >
> > firstDay = DateSerial(yr, mth, 1)
> > dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
> > Workbooks.Open dataName, 0, True
> > wsArr = Array("Value1", "Value2", "Value3", "Value4", _
> > "Value5", "Value6", "Value7", "Value8")
> >
> > Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
> > For Each wsName In wsArr
> > Set tmpWs = tmpBk.Worksheets(wsName)
> > [snip]
> > Next wsName
> >
> > When I try to compile this I get the error "Can't assign to array". I know
> > I
> > could go through one by one and assign the values by saying
> > wsArr(1) = Value1
> > for instance but I'd like to get them all done at once.
> >
> > Any suggestions?
> >
> > TIA
> > --
> > There are 10 types of people in the world - those who understand binary
> > and
> > those who don't.

>
>
>

 
Reply With Quote
 
Geoff
Guest
Posts: n/a
 
      13th Jun 2008
Thanks Alan

I tried accessing the link there and got a 502 error - I'm not sure whether
this is a problem with the server at that end or maybe the webmarshall here.

Thanks anyway
--
There are 10 types of people in the world - those who understand binary and
those who don't.


"Alan Beban" wrote:

> If the functions in the freely downloadable file at
> http://home.pacbel.net/beban are available to your workbook
>
> Dim wsArr() As String
> ReDim wsArr(0 To 0)
> Assign Array("Value1", "Value2", "Value3", "Value4", "Value5", _
> "Value6", "Value7", "Value8"), wsArr
>
> Alan Beban
>
> Geoff wrote:
> > I would like to run the same code over a number of worksheets, and to this
> > end I've declared a static array as follows:
> >
> > Dim tmpBk As Workbook
> > Dim wsArr(1 To 8) As String
> > Dim wsName As String
> > Dim tmpWs As Worksheet
> > Dim tmpRng As Range
> > Dim dataName As String
> > Dim firstDay As Date
> >
> > firstDay = DateSerial(yr, mth, 1)
> > dataName = DATAPATH & yr & "hi\" & Format(firstDay, "mmyy") & "hi.xls"
> > Workbooks.Open dataName, 0, True
> > wsArr = Array("Value1", "Value2", "Value3", "Value4", _
> > "Value5", "Value6", "Value7", "Value8")
> >
> > Set tmpBk = Workbooks.Open(HCMCPATH & "something.xls", 0)
> > For Each wsName In wsArr
> > Set tmpWs = tmpBk.Worksheets(wsName)
> > [snip]
> > Next wsName
> >
> > When I try to compile this I get the error "Can't assign to array". I know I
> > could go through one by one and assign the values by saying
> > wsArr(1) = Value1
> > for instance but I'd like to get them all done at once.
> >
> > Any suggestions?
> >
> > TIA

>

 
Reply With Quote
 
Alan Beban
Guest
Posts: n/a
 
      13th Jun 2008
Geoff wrote:
> Thanks Alan
>
> I tried accessing the link there and got a 502 error - I'm not sure whether
> this is a problem with the server at that end or maybe the webmarshall here.
>
> Thanks anyway


Sorry. It needs 2 l's in pacbell.

http://home.pacbell.net/beban

At any rate, you received a number of responses indicating that you
won't have a problem if you use a Variant() array (or an array contained
within a Variant variable) rather than an array of a different type. The
function I was referring you to allows assignment to arrays of any
built-in type.

Alan Bebam
 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

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


Similar Threads
Thread Thread Starter Forum Replies Last Post
Taking value from one array and assigning to another array Varun Microsoft Excel Programming 3 10th Mar 2009 05:46 AM
Randomly Assigning Array James Microsoft C# .NET 4 26th Jul 2005 03:32 PM
Assigning a value to an array cell Srikanth Ganesan Microsoft Excel Programming 1 17th Sep 2004 03:09 AM
Re: Assigning 10x1 array to 2nd collumn of 10x3 array Alan Beban Microsoft Excel Programming 0 30th Jul 2004 01:38 AM
Re: Assigning 10x1 array to 2nd collumn of 10x3 array Myrna Larson Microsoft Excel Programming 0 29th Jul 2004 11:57 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 06:58 PM.