Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 5107
  • Last Modified:

vba arrays

how do I declare a global array and add values to it programmatically from one of the subforms?
0
YZlat
Asked:
YZlat
  • 4
  • 3
  • 3
1 Solution
 
joekendallCommented:
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
 
stevbeCommented:
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
 
YZlatAuthor Commented:
Steve, I get an error in this line

ReDim Preserve pvarArray(UBound(pvarArray) + 1)

run-time error '9' Subscript out of range
0
Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

 
stevbeCommented:
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
 
YZlatAuthor Commented:
that did not work either
0
 
YZlatAuthor Commented:
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
 
joekendallCommented:
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
 
stevbeCommented:
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
 
YZlatAuthor Commented:
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
 
joekendallCommented:
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

Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

  • 4
  • 3
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now