Solved

vba arrays

Posted on 2003-10-30
10
5,099 Views
Last Modified: 2009-01-23
how do I declare a global array and add values to it programmatically from one of the subforms?
0
Comment
Question by:YZlat
  • 4
  • 3
  • 3
10 Comments
 
LVL 11

Expert Comment

by:joekendall
ID: 9649998
You can declare a global array in a module.

Public myArray(10) As String

To add values to it, you would need to do something like this.

Dim n As Long

For n = 1 to 10
'This will fill the array with the value of a textbox on the subform
    myArray(n) = Forms!mySubform!myTextBox
Next

Joe
0
 
LVL 39

Expert Comment

by:stevbe
ID: 9649999
In a standard module ...

Public pvarArray()

in the form code

this will retain the data that already exists in the array and add 1 more element for you to store new data in.
ReDim Preserve pvarArray(UBound(pvarArray) + 1)

then to add a new value
pvarArray(UBound(pvarArray)) = "YourValueHere"

Steve
0
 
LVL 35

Author Comment

by:YZlat
ID: 9650087
Steve, I get an error in this line

ReDim Preserve pvarArray(UBound(pvarArray) + 1)

run-time error '9' Subscript out of range
0
 
LVL 39

Expert Comment

by:stevbe
ID: 9650191
genric all purpose function ....

Public pvarArray As Variant

Public Function AddToArray(NewValue As Variant)
    If IsArray(pvarArray) Then
        ReDim Preserve pvarArray(UBound(pvarArray) + 1)
        pvarArray(UBound(pvarArray)) = NewValue
    Else
        pvarArray = Array(NewValue)
    End If
End Function

Steve
0
 
LVL 35

Author Comment

by:YZlat
ID: 9650934
that did not work either
0
Ransomware-A Revenue Bonanza for Service Providers

Ransomware – malware that gets on your customers’ computers, encrypts their data, and extorts a hefty ransom for the decryption keys – is a surging new threat.  The purpose of this eBook is to educate the reader about ransomware attacks.

 
LVL 35

Author Comment

by:YZlat
ID: 9650991
I tried a different approach:
I declared Public myArray as Variant in one of the public modules.
Then in my code for the subform I put
 ReDim Preserve myArray(UBound(myArray) + 1)
myArray = Array(myValue)

but then i started to get a type mismatch error in line ReDim Preserve myArray(UBound(myArray) + 1)
0
 
LVL 11

Expert Comment

by:joekendall
ID: 9651064
YZlat:

Did you try my example? If you want a dynamic array, you can change it this way.

Public myArray() As String

To add values to it, you would need to do something like this.

Dim n As Long

For n = 1 to 10
'This will fill the array with the value of a textbox on the subform
    Redim Preserve myArray(n)
    myArray(n) = Forms!mySubform!myTextBox
Next

Joe
0
 
LVL 39

Expert Comment

by:stevbe
ID: 9651082
that is because a variant is not an array until you make it one as I coded for specifically in my function. Wwe can expand it to handle any publically declared variant variable ...

Public Function AddToArray(PublicArray As Variant, NewValue As Variant)
    If IsArray(PublicArray) Then
        ReDim Preserve PublicArray(UBound(PublicArray) + 1)
        PublicArray(UBound(PublicArray)) = NewValue
    Else
        PublicArray = Array(NewValue)
    End If
End Function

then in your form you pass the array to add the value to and the value to be added to the AddToArray function.

AddToArray(myArray, myValue)

Steve
0
 
LVL 35

Author Comment

by:YZlat
ID: 9651216
joekendall, I guess I did not make it very clear what I need. I have a form and a subform. A subform ia a datasheet form and when the user clicks on one cell, the contents of the cell should be added to an array. The user should be able to add multiple items.
Then when the button clicked, the contents of an array will be manipulated further.
And if the form is closed or reloaded I want the array to empty itself.
0
 
LVL 11

Accepted Solution

by:
joekendall earned 35 total points
ID: 9651261
In a module add this code.

Public myArray() As String
Public nCounter As Long

Do you have the Click event set up? If so, just add this code.

nCounter = nCounter+1
Redim Preserve myArray(nCounter)
myArray(nCounter) = Forms!mySubform!myTextBox

To clear the array, you can do it this way.

Redim myArray(0)

Joe
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In the previous article, Using a Critera Form to Filter Records (http://www.experts-exchange.com/A_6069.html), the form was basically a data container storing user input, which queries and other database objects could read. The form had to remain op…
In the article entitled Working with Objects – Part 1 (http://www.experts-exchange.com/Microsoft/Development/MS_Access/A_4942-Working-with-Objects-Part-1.html), you learned the basics of working with objects, properties, methods, and events. In Work…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
In Microsoft Access, learn different ways of passing a string value within a string argument. Also learn what a “Type Mis-match” error is about.

911 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now