Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 21
Default Understanding the difference

Below are two programs that - to my understanding - are the same. Why does
the first one generate an error message and the second one not? Such small
differences (there is a similar thing with the Collection.add function) often
incur hours of debugging to me and therefore I would love to understand them.

1st:

Dim sums As New Collection
Dim colors As New Collection
Dim products As New Collection

If ExistsInColl(sums, color) Then "do stuff"

2nd:

Dim sums, colors, products As New Collection

If ExistsInColl(sums, color) Then "do stuff"


the function that is called:

Public Function ExistsInColl(ByRef col As Collection, ByVal index As String)
As Boolean
On Error GoTo ErrNotInColl
Dim tmp
tmp = col(index)
ExistsInColl = True
Exit Function
ErrNotInColl:
On Error GoTo 0
ExistsInColl = False
End Function
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 523
Default Understanding the difference

dim i, j as integer declares i as a variant and j as an integer, so

Dim sums, colors, products As New Collection declares two variants (sums,
colors) and one collection.

Sam

"Fabian" wrote:

Below are two programs that - to my understanding - are the same. Why does
the first one generate an error message and the second one not? Such small
differences (there is a similar thing with the Collection.add function) often
incur hours of debugging to me and therefore I would love to understand them.

1st:

Dim sums As New Collection
Dim colors As New Collection
Dim products As New Collection

If ExistsInColl(sums, color) Then "do stuff"

2nd:

Dim sums, colors, products As New Collection

If ExistsInColl(sums, color) Then "do stuff"


the function that is called:

Public Function ExistsInColl(ByRef col As Collection, ByVal index As String)
As Boolean
On Error GoTo ErrNotInColl
Dim tmp
tmp = col(index)
ExistsInColl = True
Exit Function
ErrNotInColl:
On Error GoTo 0
ExistsInColl = False
End Function

  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,934
Default Understanding the difference

This..

Dim sums, colors, products As New Collection


is NOT a shortcut for this...

Dim sums As New Collection
Dim colors As New Collection
Dim products As New Collection


In VB, you must declare (Dim) each variable as to its Data type individually
or else it declared as the default type of Variant. So, in the first quoted
declaration, only 'products' is declared as a New Collection... 'sums' and
'colors', since they are not individually declared, get declared as Variant.
I'm guessing the error you are getting is because the ExistsInColl
subroutine you are passing them to does not expect them to be Collections.
By the way, IF the variables should have been New Collections (remember, I
said *if*... I'm just trying to show you syntax here), the way to declare
them as such all on one line (so that they are individually declared) would
have been this way...

Dim sums As New Collection, colors As New Collection, products As New
Collection

The above line probably word-wrapped in your newsreader, but it should all
have been on one line. The declared data types do not all have to be the
same to use the single-line declaration. For example, this would be legal
syntax...

Dim Var1 As Long, Var2 As Double, Var3 As Range

Personally, I don't like to do single line declarations like this as I think
they are harder to read (think coming back to your program in six months to
modify it in some way; or, think in an office situation where someone else
is given the assignment to modify the code you wrote).

--
Rick (MVP - Excel)


"Fabian" wrote in message
...
Below are two programs that - to my understanding - are the same. Why does
the first one generate an error message and the second one not? Such small
differences (there is a similar thing with the Collection.add function)
often
incur hours of debugging to me and therefore I would love to understand
them.

1st:

Dim sums As New Collection
Dim colors As New Collection
Dim products As New Collection

If ExistsInColl(sums, color) Then "do stuff"

2nd:

Dim sums, colors, products As New Collection

If ExistsInColl(sums, color) Then "do stuff"


the function that is called:

Public Function ExistsInColl(ByRef col As Collection, ByVal index As
String)
As Boolean
On Error GoTo ErrNotInColl
Dim tmp
tmp = col(index)
ExistsInColl = True
Exit Function
ErrNotInColl:
On Error GoTo 0
ExistsInColl = False
End Function


  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1,049
Default Understanding the difference

in older versions of BASIC

Dim sums, colors, products As New Collection
was good enough to declare each variable as a Collection. BUT not now

so this
Dim sums, colors, products As New Collection
is akin to this
Dim sums As Variant
Dim colors As Variant
Dim products As New Collection


Also, using NEW this is not like by many developers as we can't predict when
the object is created.

using
Dim products As Collection

then
SET products = New Collection
leave your code in control




"Fabian" wrote in message
...
Below are two programs that - to my understanding - are the same. Why does
the first one generate an error message and the second one not? Such small
differences (there is a similar thing with the Collection.add function)
often
incur hours of debugging to me and therefore I would love to understand
them.

1st:

Dim sums As New Collection
Dim colors As New Collection
Dim products As New Collection

If ExistsInColl(sums, color) Then "do stuff"

2nd:

Dim sums, colors, products As New Collection

If ExistsInColl(sums, color) Then "do stuff"


the function that is called:

Public Function ExistsInColl(ByRef col As Collection, ByVal index As
String)
As Boolean
On Error GoTo ErrNotInColl
Dim tmp
tmp = col(index)
ExistsInColl = True
Exit Function
ErrNotInColl:
On Error GoTo 0
ExistsInColl = False
End Function


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
understanding of a formula sabi New Users to Excel 5 March 25th 09 08:43 AM
Understanding R1C1 Alex Excel Programming 5 June 25th 08 08:30 PM
Not understanding with/end with davegb Excel Programming 7 March 6th 06 09:42 PM
charting a difference of 2 columns' w/o adding a difference column Wab Charts and Charting in Excel 4 July 27th 05 02:37 AM
Not understanding If Not..Then nothing davegb Excel Programming 6 June 14th 05 04:49 PM


All times are GMT +1. The time now is 07:16 PM.

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

About Us

"It's about Microsoft Excel"