Jeg forstår at du ønsker at kalde en procedure, hvis navn du har i en streng-variabel. Det understøtter VBA ikke direkte.
Funktionen Eval() kan blive din redning, omend løsningen ikke er helt smuk.
Eval() kan evaluere udtryk, herunder funktioner. Den kan ikke køre procedurer (Sub), så du må nok lave din Sub om til en Function. Når du så kalder funktionen direkte (og ikke via Eval()), må du så skrive
Call Biler(PersonId)
i stedet for som tidligere
Biler(PersonId)
Til gengæld kan du så skrive
Eval(a & "(""" & PersonId & """)")
hvor a er en streng med værdien "Biler". Det antages her, at PersonId er en streng, og at den ikke indeholder anførselstegn (").
Du kan også definere følgende
Sub CallFunction(name as String, stringParameter as String) Eval(name & "(""" & stringParameter & """)") End Sub
Så kan du skrive
CallFunction a, PersonId
og få kaldt funktionen Biler(PersonId), hvis altså a indeholder strengen "Biler". Stadig må PersonId ikke indeholde anførselstegn; dette bør bygges ind i CallFunction(), så den erstatter alle anførselstegn (") med dobbelte (""). Så vil kravet om at der ikke må være anførselstegn bortfalde.
Man kan i øvrigt godt kalde en Sub inde fra en Function, så du kan faktisk bevare din Sub som den er, og så i stedet kalde en Function, som kalder Sub'en. Du kan nemlig pakke alle dine Subs, som du vil kunne kalde via navne i strengvariabler, ind i funktioner efter følgende mønster:
Sub Biler(PersonId) ... End Sub
Function Biler_Func(PersonId) Biler(PersonId) End Function
Så kan du lave en CallSub i stedet for CallFunction:
Sub CallSub(name as String, stringParameter as String) Eval(name & "_Func(""" & stringParameter & """)") End Sub
som så kalder den oprindelige Sub, som altså er uændret i forhold til hvordan den er nu. Kaldet er som før:
CallSub a, PersonId
Ja, en lidt speciel løsning måske, men det kan være den er okay?
Skal spørgsmålet forstås sådan at du har en udregning, som ser sådan ud: a = biler(PersonID) og nu vil vide hviken PersonID, der svarer til et givet a.
Det kan du kun regne ud, hvis du kender indholdet af funktionen biler. Sandsynlig skal du gennemløbe listen med alle PersonID og for hvert tilfælde bruge funtionen og se om et af resultaterne er = a.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.