Solved

# Function resturn array...

Posted on 2000-03-31
Medium Priority
221 Views
How can I set up a function that returns an array?
0
Question by:mhdhallak
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points

LVL 32

Accepted Solution

Erick37 earned 32 total points
ID: 2675244
By passing the array ByRef, you can have a function modify the array passed to it as a parameter:

Option Explicit

Private Sub Command1_Click()
Dim a(10) As Long
Call ModifyArray(a)
Debug.Print a(5)
End Sub

Private Function ModifyArray(a() As Long)
Dim i As Long
For i = LBound(a) To UBound(a)
a(i) = a(i) + 1
Next
End Function
0

LVL 14

Expert Comment

ID: 2675260
In VB6 arrays can be passed by reference. When you do a ByRef, the subroutine then updates the actual array in the calling procedure. Below is an example.. just copy and paste it into a New Standard.Exe project and run it.. <smile>

<----- Code Begin ----->

Option Explicit

Dim strWork() As String
Dim intWork() As Integer
ReDim intWork(3)
intWork(0) = 1
intWork(1) = 2
intWork(2) = 3
Call MySubroutine(intWork(), strWork())

MsgBox (intWork(0) & " = " & strWork(0) & vbCrLf _
& intWork(1) & " = " & strWork(1) & vbCrLf _
& intWork(2) & " = " & strWork(2) & vbCrLf)

End Sub

Private Sub MySubroutine _
(ByRef intNumbers() As Integer, _
ByRef strStrings() As String)

Dim intIndex As Integer
ReDim strStrings(UBound(intNumbers))
For intIndex = 0 To UBound(intNumbers)
strStrings(intIndex) = intNumbers(intIndex) & " *** "
intNumbers(intIndex) = intNumbers(intIndex) + 10
Next intIndex

End Sub

<----- Code End ----->
0

LVL 14

Expert Comment

ID: 2675267
You can also do this by using Variants.. an Example follows:

<----- Code Begin ----->

Option Explicit

Dim strWork() As String
Dim intWork() As Integer
Dim varWork As Variant
ReDim intWork(3)
intWork(0) = 1
intWork(1) = 2
intWork(2) = 3
varWork = intWork()
strWork() = MyFunction(varWork)

MsgBox (intWork(0) & " = " & strWork(0) & vbCrLf _
& intWork(1) & " = " & strWork(1) & vbCrLf _
& intWork(2) & " = " & strWork(2) & vbCrLf)

End Sub

Private Function MyFunction _
(ByRef varTable As Variant) _
As Variant

Dim intNumbers() As Integer
intNumbers() = varTable

Dim strStrings() As String
ReDim strStrings(UBound(intNumbers))

Dim intIndex As Integer
For intIndex = 0 To UBound(intNumbers)
strStrings(intIndex) = intNumbers(intIndex) & " *** "
intNumbers(intIndex) = intNumbers(intIndex) + 10
Next intIndex

MyFunction = strStrings()

End Function

<----- Code End ----->
0

Author Comment

ID: 2676001
Sorry guys. But Eric was the first one to answer the question and I worked out his answer and it was right.

0

LVL 10

Expert Comment

ID: 5150881
Erick37 - would you mind sending me an e-mail please, it's quite urgent. deathtospammers@eircom.net
0

## Featured Post

Question has a verified solution.

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

There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
This lesson covers basic error handling code in Microsoft Excel using VBA. This is the first lesson in a 3-part series that uses code to loop through an Excel spreadsheet in VBA and then fix errors, taking advantage of error handling code. This l…
###### Suggested Courses
Course of the Month15 days, 3 hours left to enroll