Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 9
Default "Type" statement and arrays

I am having difficulty getting a user defined data type to function
with arrays. What I would like to do is create a data type that is
comprised of four 1-D arrays. Then I would like to load the individual
arrays in another module so I can trasnfer all four arrays as a single
argument (the new data type) in a function. Here's what I have done so
far

In one module;

Option Base 1

Public Type PlotScalars

Xscalar(1 To 4) As Integer
Yscalar(1 To 4) As Integer
Zscalar(1 To 4) As Integer

End Type

In another module

Dim MyPlotScalars As PlotScalars

MyPlotScalars.Xscalar = Array(1, 0, 1, 1)
MyPlotScalars.Yscalar = Array(1, 1, 0, 1)
MyPlotScalars.Zscalar = Array(1, 1, 1, 0)

I get an error "Compile error: can't assign to array." I would prefer
not to have to load each element of the data type arrays one element at
a time. Is there an easy way around this?

My main motivation for doing this is to cut down on the number of
arguments passed to a user defined function (which are limited to 30).

TIA

dan

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 400
Default "Type" statement and arrays

Try it like this:

Public Type PlotScalars

Xscalar As Variant
Yscalar As Variant
Zscalar As Variant

End Type

Sub xx()
Dim MyPlotScalars As PlotScalars

MyPlotScalars.Xscalar = Array(1, 0, 1, 1)
MyPlotScalars.Yscalar = Array(1, 1, 0, 1)
MyPlotScalars.Zscalar = Array(1, 1, 1, 0)
End Sub

Then you can refer to the indivisual elements of each member as follows:

myplotscalars.Xscalar(1)

The assignment must be in block ie. not by element of member

" wrote:

I am having difficulty getting a user defined data type to function
with arrays. What I would like to do is create a data type that is
comprised of four 1-D arrays. Then I would like to load the individual
arrays in another module so I can trasnfer all four arrays as a single
argument (the new data type) in a function. Here's what I have done so
far

In one module;

Option Base 1

Public Type PlotScalars

Xscalar(1 To 4) As Integer
Yscalar(1 To 4) As Integer
Zscalar(1 To 4) As Integer

End Type

In another module

Dim MyPlotScalars As PlotScalars

MyPlotScalars.Xscalar = Array(1, 0, 1, 1)
MyPlotScalars.Yscalar = Array(1, 1, 0, 1)
MyPlotScalars.Zscalar = Array(1, 1, 1, 0)

I get an error "Compile error: can't assign to array." I would prefer
not to have to load each element of the data type arrays one element at
a time. Is there an easy way around this?

My main motivation for doing this is to cut down on the number of
arguments passed to a user defined function (which are limited to 30).

TIA

dan


  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 863
Default "Type" statement and arrays

When you use the ARRAY statement, the variable on the left side of the
assignment statement must be a VARIANT, and you end up with a VARIANT
containing an array, i.e. TypeName returns Variant(). Even though you access
the elements of this array with syntax identical to what you use with a
"normal" array (created with Dim X() As Integer, etc), they are not the same
data type.

And even though the elements of that array contain integers, they are in fact
stored as variants.

If you want to use the TYPE definition that you posted, then in the other sub
you must write

Dim x(1 to 4) AS Integer
X(1) = 1
X(2) = 0
X(3) = 1
X(4) = 1
MyPlotScalers.XScalar = X()

then repeat the 4 assignment statements for the next set of values. i.e. you
have to assign the values the "old fashioned" way, with a loop, not with an
Array statement.

The less painful "fix" is to change the type statement to make the 3 arrays
variants, as the other responder suggests, i.e.

Public Type PlotScalars
Xscalar As Variant
Yscalar As Variant
Zscalar As Variant
End Type


On 11 Feb 2005 06:14:16 -0800, wrote:

I am having difficulty getting a user defined data type to function
with arrays. What I would like to do is create a data type that is
comprised of four 1-D arrays. Then I would like to load the individual
arrays in another module so I can trasnfer all four arrays as a single
argument (the new data type) in a function. Here's what I have done so
far

In one module;

Option Base 1

Public Type PlotScalars

Xscalar(1 To 4) As Integer
Yscalar(1 To 4) As Integer
Zscalar(1 To 4) As Integer

End Type

In another module

Dim MyPlotScalars As PlotScalars

MyPlotScalars.Xscalar = Array(1, 0, 1, 1)
MyPlotScalars.Yscalar = Array(1, 1, 0, 1)
MyPlotScalars.Zscalar = Array(1, 1, 1, 0)

I get an error "Compile error: can't assign to array." I would prefer
not to have to load each element of the data type arrays one element at
a time. Is there an easy way around this?

My main motivation for doing this is to cut down on the number of
arguments passed to a user defined function (which are limited to 30).

TIA

dan


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
"Type mismatch" when I try to fill an Array variable with "+" [email protected] Excel Discussion (Misc queries) 1 April 17th 07 01:28 PM
how do I type "itis" without Excel putting a space "it is"? Max Excel Worksheet Functions 4 March 18th 07 10:22 PM
Where is the toolbar with the "bold type", "font type", options fwccbcc New Users to Excel 2 May 3rd 06 09:11 PM
Need help in excel with "Statement invalid outside Type block. " error Brent[_6_] Excel Programming 3 January 17th 04 03:03 AM


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