Volgnummer in array

Status
Niet open voor verdere reacties.

Joost Renkema

Gebruiker
Lid geworden
11 jan 2011
Berichten
6
Hallo,

De laatste tijd werk ik aan een VB-macro waarin diverse arrays van verschillende eigen types. Deze typen hebben allemaal verschillende velden (zowel qua aantal als qua naam).

Met grote regelmaat heb ik het volgnummer van een record in een array nodig. Van dat record heb ik dan een tekst ingelezen vanaf een werkblad. Ik weet de array en het veldnaam waar die tekst in zou moeten staan.

Nu kan ik een gemakkelijk klein lusje maken elke keer als ik het volgnummer nodig heb. Omdat ik dit vaak nodig heb en ook vanuit verschillende arrays ben ik gaan 'knutselen' met één routine die mij het volgnummer van het eerste record levert als een opgegeven veldnaam een bepaalde waarde heeft.

Wie kan mij hiermee helpen?

Mvg,

Joost Renkema
 
Zijn het ééndimensionale arrays/matrices?

Zo ja dan dan kun je bijv. middels Application.WorksheetFunction.Match de waarde opzoeken
 
Neen, het zijn meer-dimensionale array's.
De functie die je noemt zoekt het nummer van de rij op waar een opgegeven tekst in staat - dat is niet echt wat ik zoek, maar thnx anyway.
De array die ik heb is elders gevuld en in de macro zijn daarin records toegevoegd en verwijderd. Ik ben op zoek naar het volgnummer van het eerste record in die (dynamische) array waarvan een veld een bepaalde waarde bevat.

Gr. Joost
 
Als je weet in welke "kolom" van jouw multi-dimensionale array moet zoeken kun je middels index en match jouw volgnummer krijgen.

Plaats anders even een gelijkend voorbeeldje, wellicht praten we langs elkaar heen
 
een voorbeeld stukje om te laten zien wat ik bedoel:

Code:
Sub Joost()
    Dim MultiArray(1 To 13, 1 To 2) As Variant, i As Integer, j As Integer, k As Integer
    Dim VolgNummer As Integer, ZoekWaarde As String

    k = 65
    For i = 1 To UBound(MultiArray)
        For j = 1 To UBound(Application.Transpose(MultiArray))
            MultiArray(i, j) = Chr(k)
            k = k + 1
        Next j
    Next i

    For i = 1 To UBound(MultiArray) * UBound(Application.Transpose(MultiArray))
        ZoekWaarde = Chr(i + 64)
        For j = 1 To UBound(MultiArray)
            On Error Resume Next
            VolgNummer = Application.Match(ZoekWaarde, Application.Index(MultiArray, 0, j), 0)
            If VolgNummer > 0 Then MsgBox ZoekWaarde & " gevonden in kolom " & j & " en met volgnummer: " & VolgNummer: VolgNummer = 0
        Next j
    Next i
    
End Sub
 
Dank voor het meedenken.
In onderstaande code krijg je een simplistisch idee waar ik naar op zoek ben.
De foutmelding die ik krijg is 'Only user-defined types in public modules can be coerced to or from a variant or passed to late-bound functions'.
Daarnaast heb ik geen hoe in die functie 'Get_Seq' kan laten zoeken op een veldnaam met een variabele naam.


Type Naam
Voornaam As String
Achternaam As String
End Type
Type NickName
Jongensnaam As String
Bijnaam As String
End Type
Public NaamVoll() As Naam
Public NaamNick() As NickName
Sub Toon_naam()
Dim sSeq As Single
ReDim Preserve NaamVoll(1)
ReDim Preserve NaamVoll(2)
ReDim Preserve NaamNick(1)
ReDim Preserve NaamNick(2)
NaamVoll(1).Voornaam = "Joost"
NaamVoll(1).Achternaam = "Renkema"
NaamVoll(2).Voornaam = "Alexander"
NaamVoll(2).Achternaam = "Boersema"
NaamNick(1).Jongensnaam = "Alexander"
NaamNick(1).Bijnaam = "Stupid"
NaamNick(2).Jongensnaam = "Joost"
NaamNick(2).Bijnaam = "Dombo"

sSeq = Get_Seq("Joost", "Voornaam", NaamVoll) 'Volgens mij moet dit een '1' opleveren
MsgBox sSeq
sSeq = Get_Seq("Joost", "Jongensnaam", NaamNick) 'Volgens mij moet dit een '2' opleveren
MsgBox sSeq

End Sub
Function Get_Seq(ZoekTekst As String, Veldnaam As String, NaamArray) As Single




End Function
 
Beste joost,

Je kunt in visual basic je code niet dynamisch laten zoeken op properties of methods van objecten, om deze vervolgens in te stellen.

Je kunt ook niet zoeken in een dynamische matrix met user defined types, tenzij je deze expliciet declareert.
Daarbij moet je voor het zoeken in gegevens van je user-defined type het onderdeel van het type ook expliciet benoemen.

Wat op zich logisch is, want je kunt niet dynamisch op eigenschappen/methoden zoeken,
en dus ook niet een macro schrijven om te bepalen welk onderdeel van je user defined type je op wilt vragen.

Ik wil wel helpen meedenken voor een oplossing, maar dan heb ik wat meer informatie nodig.

Wellicht dat het gebruik van klassenmodules je werk wat kan vergemakkelijken.
 
Laatst bewerkt:
Heren,

Bedankt voor het meedenken.
Ik heb zelf een minder fraaie oplossing verzonnen door per type array een 'zoek-functie' te maken.

Joost
 
Dat is mooi, Joost.

Als je iets gevonden hebt wat goed werkt, maar voor je gevoel omslachtig is, kunnen we je natuurlijk altijd nog eens helpen meedenken..!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan