Hejsan! Hej skapa en klass person. Instansiera klassen (ett objekt för varje person). Har skrivit lite kod som kanske kan ge dig några ideér:Returnera array?
Har följande problem. Mitt program ska skapa en uppsättning personer, alla med för- och efternamn. Till detta ändåmål har jag en funktion som genererar slumpvalda för- och efternamn. Som det ser ut nu anropas denna funktionen varje gång ett namn ska genereras och ska jag då skapa en grupp på 30 personer anropas funktionen 30 gånger. Problemet är då att det funktionen gör är att den skapar en array med storleken 104 (så många förnamn som finns registrerade) och sedan skapar ett slumptal och returnerar namn(slumptal).
Som ni förstår är inte detta någon smidig metod eftersom variabeln namn kommer att skapas och 104 namn kommer att sättas varje gång funktionen anropas (vilket i detta fallet är 30 ggr). Det smidigaste (som jag kommit på) är om man kunde returnera en array. Då kunde man anropa funktionen med ett argument för hur många namn man ville ha och då kunde funktionen slumpa fram 30 namn och variabeln namn behöver då bara sättas en gång.
Någon som vet om/hur man kan returnera en array, eller någon som har en bättre lösning på mitt problem?
/RickardSv: Returnera array?
Du behöver inte returner en array, du kan göra en sub
som laddar en Global eller i BasModul Public Array
Sedan kan du ju läsa denna Array varsomhelst i ditt prog
mvh
SvenSv: Returnera array?
Lägg alla objekt i en collection (dragpåse) och plocka dom sedan därur.
Se till att ha en interfacemetod som heter namn eller något som ger dig
åtkomst till det inkapslade namnet på personen.
Objektorientering löser dina problem.
/[peter.h]
Sv: Returnera array?
<code>
Option Explicit
Private mFullNames() As String
Private mFirstNames() As String
Private mLastNames() As String
Public Sub InitializeNames()
Dim Count As Long
Dim Index As Long
Dim SubIndex As Long
mFirstNames = Split("Andreas Bertil Carl David Erik Fredrik Gustav")
mLastNames = Split("Svensson Johansson Nilsson Davidsson Eriksson")
ReDim mFullNames((UBound(mFirstNames) + 1) * (UBound(mLastNames) + 1) - 1)
For Index = 0 To UBound(mFirstNames)
For SubIndex = 0 To UBound(mLastNames)
mFullNames(Count) = mFirstNames(Index) & " " & mLastNames(SubIndex)
Count = Count + 1
Next
Next
End Sub
Public Function GenerateNames(Optional Count As Long, Optional Unique As Boolean) As String()
Dim Index As Long
Dim SubIndex As Long
Dim Name As String
Dim Result() As String
Dim AllNames() As String
If Count > 0 Then
If Unique Then
If Count > (UBound(mFirstNames) + 1) * (UBound(mLastNames) + 1) Then
Err.Raise vbObjectError + 1, "GenerateNames", "Finns inte tillräckligt med namn för att skapa unika kombinationer!"
Else
Randomize
AllNames = mFullNames
ReDim Result(1 To Count)
For Index = 1 To Count
Do
SubIndex = UBound(mFullNames) * Rnd
Loop Until Len(AllNames(SubIndex))
Result(Index) = AllNames(SubIndex)
AllNames(SubIndex) = ""
Next
End If
Else
Randomize
ReDim Result(1 To Count)
For Index = 1 To Count
Result(Index) = mFullNames(UBound(mFullNames) * Rnd)
Next
End If
GenerateNames = Result
End If
End Function
Public Sub Test()
Dim Index As Long
Dim Names() As String
InitializeNames
Names = GenerateNames(30, True)
For Index = 1 To 30
Debug.Print Names(Index)
Next
End Sub
</code>