Avatar billede yuksel Nybegynder
15. april 2005 - 13:42 Der er 22 kommentarer og
1 løsning

procedure kald igennem variabel

hej til alle

jeg har en variabel som  :
a = biler

og har en kald der skal laves om så den kalder min variabel
"&A&()PersonID  ' men denne virker ikke ! :(
er der nogen der har en ide ?


uden variabel ser den sådan ud
Biler(PersonID)
Avatar billede yuksel Nybegynder
15. april 2005 - 13:54 #1
er der nogen :( ?
Avatar billede terry Ekspert
15. april 2005 - 13:55 #2
?
can you try explaining some more please? What is it exactly you are trying to do?
Avatar billede rbj_fp Nybegynder
15. april 2005 - 13:57 #3
Jeg mener ikke at du kan laver reference i Access.
Avatar billede madschristensen Nybegynder
15. april 2005 - 14:00 #4
Man kan ikke kalde en funktion med en variabel direkte
Avatar billede yuksel Nybegynder
15. april 2005 - 14:02 #5
jeg har en procedure i en af mine moduler.

public sub biler(PersonID)
msgbox " godag"
end sub


når jeg skal kalde den her procedure

så er det normalt sådan her :
Biler(PersonID)    ' også virker det bare


men det er sådan at det ikke altid er sådan at jeg kalder på biler nogle gange andre som er tilsat min variabel.

eks.
a = biler

A(PersonID )  er det samme som  Biler(PersonID)

men jeg kan bare ikke få det til at du, pga. manglende kendskab til syntaks
Avatar billede madschristensen Nybegynder
15. april 2005 - 14:04 #6
jeg mener slet ikke, at du kan gøre det på den måde.
Avatar billede yuksel Nybegynder
15. april 2005 - 14:07 #7
hmmm.... man kan  ellers godt bruger variableri sql sætninger
Avatar billede haunted Nybegynder
15. april 2005 - 14:09 #8
>>hmmm.... man kan  ellers godt bruger variableri sql sætninger<<

Jeg kan ikke se hvad det har i relation til spørgsmålet?
Avatar billede madschristensen Nybegynder
15. april 2005 - 14:10 #9
Kan du ikke omskrive din kode - og så kalde den med et parameter mere:

Sub Test(PersonID as long, HvilkenType as long)
Select Case HvilkenType.......

end Sub

Så Kalder du
Test(PersonID, 1)
Avatar billede yuksel Nybegynder
15. april 2005 - 14:13 #10
hvad er test er det en variabel ?
Avatar billede haunted Nybegynder
15. april 2005 - 14:13 #11
Det er en procedure
Avatar billede madschristensen Nybegynder
15. april 2005 - 14:16 #12
Eller endnu nemmere - lave en procedure eller function for hver "ting" du vil kalde..

Jeg kan ikke komme i tanke om hvorfor man skulle bruge variable som kald til procedure eller functioner - kun som parameter ???
Avatar billede yuksel Nybegynder
15. april 2005 - 14:20 #13
Test(PersonID, 1)  hvad nu hvis 1 er en variabel hvordan bliver det så
Avatar billede haunted Nybegynder
15. april 2005 - 14:26 #14
Jeg mener man gør således:

Sub Test(PersonID as long, HvilkenType as long)
Select Case HvilkenType.......

end Sub


Kald med:

dim var = 1

Test(PersonID, var)
Avatar billede yuksel Nybegynder
15. april 2005 - 14:26 #15
jeg kan ikke bruge det
Avatar billede yuksel Nybegynder
15. april 2005 - 14:27 #16
det skal være "&A&()PersonID
Avatar billede madschristensen Nybegynder
15. april 2005 - 14:29 #17
Det tillader syntax i VBA desværre ikke. Du må nok finde en alternativ løsning!
Avatar billede haunted Nybegynder
15. april 2005 - 14:31 #18
Er der nogen speciel grund til at det skal være på den måde?

Kan vi få at se en større del af koden, så kan det være vi ser lyset? :)
Avatar billede jhertel Nybegynder
15. april 2005 - 18:26 #19
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?
Avatar billede fynbohans Nybegynder
15. april 2005 - 20:21 #20
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.
Avatar billede jhertel Nybegynder
19. april 2005 - 09:53 #21
yuksel, har du nogen tilbagemelding om du kunne bruge noget af det?
Avatar billede yuksel Nybegynder
20. april 2005 - 10:49 #22
super , jeg trorre jeg kommer til at bruge det, ligenu er det andet faldet lidt til jorden men jeg er sikker på at det dukker op igen
taker :)
Avatar billede jhertel Nybegynder
20. april 2005 - 11:07 #23
Selv tak! :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Teamleder til AL Sydbanks GDPR & Tech Regulation i Aabenraa

Politiets Efterretningstjeneste

Bliv IT-supporter i PET's IT Servicedesk

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations