[Webinar] Learn how to a build a cloud-first strategyRegister Now

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

Function resturn array...

How can I set up a function that returns an array?
0
mhdhallak
Asked:
mhdhallak
1 Solution
 
Erick37Commented:
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
 
wsh2Commented:
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

Private Sub Form_Load()

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
 
wsh2Commented:
You can also do this by using Variants.. an Example follows:

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

Option Explicit

Private Sub Form_Load()

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
 
mhdhallakAuthor Commented:
Sorry guys. But Eric was the first one to answer the question and I worked out his answer and it was right.

0
 
caraf_gCommented:
Erick37 - would you mind sending me an e-mail please, it's quite urgent. deathtospammers@eircom.net
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.

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