Avatar billede mormie Nybegynder
22. august 2008 - 20:09 Der er 16 kommentarer

"Oversættelse" af visual basic sprog

Jeg har fundet et eksempel på "multiselect i listbox", og forsøger af bruge den på mine egne data - men jeg mangler at forstå nogle af kommandoerne.

Private Sub cmdPreview_Click()
    Dim Itm As Variant
    Dim SQLStr As String

For Each Itm In Me!Listbox.ItemsSelected
        SQLStr = SQLStr & Me!Listbox.ItemData(Itm) & ", "
    Next Itm

If Len(SQLStr) > 0 Then
        SQLStr = "Medlemsnr in (" & Left(SQLStr, Len(SQLStr) - 2) & ")"
    End If

DoCmd.OpenReport "MEDLEMMER", acViewPreview, , SQLStr

Håber at en eller anden kan forklare mig lidt om hvad de enkelte dele kan, så jeg kan forstå dem, og sætte mine egne data ind.
Avatar billede pidgeot Nybegynder
22. august 2008 - 20:30 #1
Private Sub cmdPreview_Click()
Opret en procedure ved navn cmdPreview_Click, der ikke tager nogle parametre.

    Dim Itm As Variant
    Dim SQLStr As String
Opret to variable, Itm, der er en variant, og SQLStr, der er en tekststreng

For Each Itm In Me!Listbox.ItemsSelected
For hver valgt linje i Listbox

        SQLStr = SQLStr & Me!Listbox.ItemData(Itm) & ", "
tilføj linjens værdi til SQLStr, efterfulgt af ", "

    Next Itm

If Len(SQLStr) > 0 Then
Hvis SQLStr ikke er tom
        SQLStr = "Medlemsnr in (" & Left(SQLStr, Len(SQLStr) - 2) & ")"
Sæt SQLStr til "Medlemsnr in(", efterfulgt af SQLStr fraregnet de to sidste tegn, efterfulgt af ")"

    End If

DoCmd.OpenReport "MEDLEMMER", acViewPreview, , SQLStr
Åbn rapporten MEDLEMMER i vis udskrift (dvs. det vises på skærmen, i stedet for at blive skrevet ud), med SQLStr som kriterie

Sagt på anden måde, det viser dig rapporten MEDLEMMER med de poster hvor Medlemsnr er blandt de valgte værdier i listboxen (Medlemsnr er i/"in" den kommaseparerede liste der er blevet dannet).

Måske lidt flere oplysninger end du havde behov for, men så mangler der i det mindste ikke noget. *-)
Avatar billede mugs Novice
22. august 2008 - 20:39 #2
Og dog:

End if Betyder, ar du afslutter If blokken. Når du bruger det reserverede ord If, SKAL du også afslutte med en End If.

Petitesser :o)
Avatar billede pidgeot Nybegynder
22. august 2008 - 20:44 #3
Nu sprang jeg End og Next over - mente ikke jeg kunne sige så meget til dem :)
Avatar billede mugs Novice
22. august 2008 - 21:33 #4
Nej, som jeg skriver er det jo petitesser. Men glemmes de får du en fejl, og en sådan fejl er ofte uforståelig for mange brugere.
Avatar billede mormie Nybegynder
23. august 2008 - 06:46 #5
Så havde jeg næstern forstået det hele, men jeg mangler stadig lidt forståelse til () i denne oversættelse - hvad skal "fraregnet de to sidste tegn" gøre godt for?

Sæt SQLStr til "Medlemsnr in(", efterfulgt af SQLStr fraregnet de to sidste tegn, efterfulgt af ")"
Avatar billede mormie Nybegynder
23. august 2008 - 06:47 #6
Det med IF - END IF, og NEXT vidste jeg godt - så det er lige meget med "oversættelse"
Avatar billede mugs Novice
23. august 2008 - 08:26 #7
Det er svært at sige. Prøv nederst i koden at indsætte:

Debug.print SQLStr

Derefter går du i View og markerer at Immediate vinduet skal vises (show). Kør koden og åbn VBA editoren, så står SQLStr nederst. Ændre deredfter SQLStr til:

SQLStr = "Medlemsnr in (" & Left(SQLStr, Len(SQLStr)) & ")"

KØr koden og se igen SQLStr.
Avatar billede terry Ekspert
23. august 2008 - 10:00 #8
"fraregnet de to sidste tegn" gøre godt for?"

for each selected item in the listbox

Me!Listbox.ItemData(Itm) & ", "

is added to SQLstr

for the last item this isnt necessary, so the code just removes these so that the SQLstr will comtain something like

"Medlemsnr in(1,5,7,9)"
and not
"Medlemsnr in(1,5,7,9, )"
Avatar billede terry Ekspert
23. august 2008 - 10:01 #9
"Medlemsnr in(1,5,7,9, )" would give an error
Avatar billede mormie Nybegynder
24. august 2008 - 08:35 #10
Jeg har prøvet at sætte mine egne data ind:
cmdPreview = kommandoknap20
Medlemsnr = rekvirent
MEDLEMMER = Alleopgaver_rp

Men der kommer en parameterboks hvor jeg skal skrive et eller andet - det forstår jeg ikke (altså at boksen kommer), jeg har ingen steder [] som skulle antyde at den skulle komme frem.??????

Hvis jeg annullerer boksen, kan jeg vælge "debug", og linien med "DoCmd.OpenReport "MEDLEMMER", acViewPreview, , SQLStr" fremhæves med gult - hvad kan der være galt her ??????
Avatar billede mugs Novice
24. august 2008 - 09:51 #11
Fejlen ligger i den linie der er markeret med gult!

Sandsynligvis er det eet eller flere objekter der ikke genkender et felt. Kontroller, at du har alle felter i din forespørgsel / rapport samt for stavefejl.
Avatar billede mormie Nybegynder
24. august 2008 - 11:42 #12
1. Hvad med den parameterboks (se ovenover) som kommer - stammer den også fra en eller anden stavefejl eller manglende objekt???? Betyder det noget mht store/små bogstaver?????
Avatar billede mugs Novice
24. august 2008 - 12:27 #13
Små / store bogstaver burde ikke betyde noget.

Men en stavefejl eller manglende felt i et objekt kan fremprovokere fejlen.
Du kan evt. sende din db til:

mugs snabelting mail.dk

som en zip fil, så ser jeg på den senere.
Avatar billede terry Ekspert
24. august 2008 - 18:09 #14
Jeg har prøvet at sætte mine egne data ind:
cmdPreview = kommandoknap20
Medlemsnr = rekvirent
MEDLEMMER = Alleopgaver_rp

What value does kommandoknap20 have?
What value does rekvirent have?
What value does Alleopgaver_rp have?

Can we see the code (DoCmd.OpenReport ...)?
Avatar billede mormie Nybegynder
25. august 2008 - 10:36 #15
TAK for hjælpen - point går til pidgeot fordi han oversatte de fleste kommandoer så jeg kunne forstå dem. Det jeg ikke forstod fatter jeg stadig ikke - men min database er i hus.
Avatar billede pidgeot Nybegynder
22. september 2008 - 14:33 #16
(Meget forsinket) svar kommer her :)
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