SYMPTOMS
With the 16-bit version of Microsoft Visual Basic 4.0, if you attempt to
access a collection of a class, you may receive one of the following
errors.
When running in Microsoft Windows 3.11 or Microsoft Windows For Workgroups
3.11, the error will say:
"VB caused a General Protection Fault in module VBA2.DLL"
-or-
"Run-time Error 9:
Subscript Out of Range"
When running in Microsoft Windows 95, the dialog box will report:
"An error has occurred in your program"
After clicking the "Ignore" button several times, another dialog box will
report:
"Run time error '5': Invalid procedure call"
When running in Microsoft Windows NT or Windows 2000:
"An error has occurred in your application"
After clicking "Ignore" twice, you will see:
"Run time error '458'
Variable uses an OLE type not supported in Visual Basic"
When running in Microsoft Windows 98, a dialog box will report:
Run-Time error '91':
Object variable or With block variable not set
CAUSE
This error will occur under the following circumstances:
- The Class module is in the same project as the code that accesses the
collection.
-and-
- The Public property of the class module is True.
-and-
- The collection is not explicitly instantiated before you access it. In
other words, the collection is implicitly instantiated with the New
keyword when the collection is dimensioned.
RESOLUTION
To work around this problem, explicitly instantiate the collection. For
example, if you are receiving one of the errors described above with the
following code:
Public MyCollection As New Collection
Private Sub Class_Initialize()
MyCollection.Add "Hello"
End Sub
Change the code to look like the following:
Public MyCollection As Collection
Private Sub Class_Initialize()
Set MyCollection = New Collection
MyCollection.Add "Hello"
End Sub