Avatar billede vanni Nybegynder
20. august 2003 - 23:14 Der er 23 kommentarer og
2 løsninger

Hvilken event i form er den sidste

Hej

Jeg har noget SQL+VBA-kode i et modul, der tager nogle sekunder at udføre. Der har jeg en tæller som skal bruges til at underholde, mens man venter.

Hvilken reference skal man bruge til: modul - forms!Kartotek!Tekstbox.tæller?

Jeg vil have formen færdig-loaded inden koden afvikles. Jeg har prøvet sidst i load-event, men der er formen ikke vist på skærmen endnu - så er der forslag til dette?

Mvh. Vanni
Avatar billede hekla Nybegynder
20. august 2003 - 23:20 #1
Hvad med EfterLayout?

Private Sub Form_AfterLayout(ByVal drawObject As Object)

End Sub
Avatar billede vanni Nybegynder
20. august 2003 - 23:44 #2
Den event kan jeg ikke finde.
Avatar billede jkrons Professor
21. august 2003 - 00:32 #3
Såvidt jeg husker gælder det, båpde Open, Load, og Current (at de indtræffer før formen er åbnet. Men du kunne måske lade en af disse hændelser maksimere formen eller noget i den stil og så bruge Resize til at udføre din kode.
21. august 2003 - 10:03 #4
Ved Form_Load skulle formularen være færdigindlæst!

Hvordan ser din kode ud?
Umiddelbart burde en sætning ikke kunne se således ud:
forms!Kartotek!Tekstbox.tæller, da tæller ikke er en gyldig egenskab på en tekstboks.
Avatar billede jkrons Professor
21. august 2003 - 12:04 #5
thomasjepsen-> Prøvb at lave en msgbox på Form_load. Hvis du så åbner formularen vil meddelelsesboksen blive vist før formularen vises. Og det samme sker så vidt jeg kan se for alle de andre "åbnings" hændelsr.
21. august 2003 - 12:12 #6
For så vidt, har du ret, men du kan spørge på og redigere en hvilken som helst tekstboks på formularen, så den er færdigindlæst. Den mangler bare at få Windows til at vise den.

Kunne du give e på koden?
Avatar billede jkrons Professor
21. august 2003 - 14:50 #7
Enig, men brugeren ville jo gerne have noget til at ske, når formularen først er vist.
Avatar billede vanni Nybegynder
21. august 2003 - 19:39 #8
thomasjepsen> Det var kun for at give en retning af, hvad jeg har intentioner om. Så ville gerne vide syntax'en?

jkrons> Hvis jeg skulle bruge en MSGBOX før åbningen, skal jeg have den til at lukke automatisk efter modulet er færdigafviklet - kan man det - og i givet fald hvordan?
Avatar billede jkrons Professor
21. august 2003 - 23:39 #9
Jeg ved faktisk ikke om man kan få den til at lukke automatisk, bortset fra noget SendKeys og det kan måske være lidt risikabelt, da man ikke kan være sikker på, om msgboxen ret faktisk er aktiv når man sender tastetrykket.
Avatar billede hekla Nybegynder
22. august 2003 - 00:38 #10
Lav din msgbox som en formular, og luk den når du har afviklet koden
Avatar billede vanni Nybegynder
22. august 2003 - 07:58 #11
hekla> Ok, det skulle være scenariet - noget pseudokode:

private form1
  åbn form2 "det varer et lille øjeblik!" ' som modal
  afvikl kode i modul
  luk form2
  kode
  kode
  ...
end sub
Avatar billede jkrons Professor
22. august 2003 - 08:14 #12
Idéen er god, men hos mig virker det ikke helt efter hensigten. Formularen (form2)åbnes godt nok, men pc'en bruger alle sine ressourcer på at køre koden, så  teksten i formularen bliver først vist, når kodeafviklingen er tilendebragt -og så er det ligesom ligegyldigt.
Avatar billede jkrons Professor
22. august 2003 - 08:25 #13
Kunne du ikke bare bruge proces-baren i statuslinjen til at vise, at processen går fremad?
Avatar billede vanni Nybegynder
22. august 2003 - 11:11 #14
hekla> "proces-baren i statuslinjen til at vise, at processen går fremad"
Hvordan det?
Avatar billede jkrons Professor
22. august 2003 - 11:37 #15
Her er et eksempel på, at du kan få processbaren til at vise fremskridt i en opgave. I mit tilfælde kører den bare en løkke igennm: 10.000.000 bare for at få tiden til at gå. Når den er kørt 25% af gangene sender jeg den info til baren og så fremdeles. Når det hele er slut fjerner jeg baren igen. Pørv selv at eksperimentere med i din egen kodeafvikling at sende updates, efterhånden som koden skrider frem.

Private Sub Form_Load()
RetVal = SysCmd(acSysCmdInitMeter, "Arbejder", 100)
For i = 1 To 10000000
If i Mod 2500000 = 0 Then
RetVal = SysCmd(acSysCmdUpdateMeter, i / 100000)
End If
Next i
retval = SysCmd(acSysCmdRemoveMeter)
End Sub
Avatar billede jkrons Professor
22. august 2003 - 11:37 #16
Du kan altid skifte teksten "Arbejder" ud med noget mere kreativt.
Avatar billede mugs Novice
23. august 2003 - 07:25 #17
jkrons forslag fungerer perfekt. Jeg benytter den selv ved kørsel af f.eks. lange opdateringsforespørgsler. Men jeg er mere tilhænger af en progressbar, som ligger i ActiveX-opjekterne. Den giver en vandret bjælke på skærmen, der "tæller" op og forsvinder når den er færdig:

Private Sub Form_Timer()
Dim i, j As Long
For i = 0 To 100
For j = 0 To 250000
Next j
Progress.Value = i
Next i
Me.TimerInterval = 0
Progress.Visible = False
End Sub

Private Sub Form_Load()
Me.TimerInterval = 10
End Sub

Nu skal afviklingen af Progressbar blot kobles sammen med den handling der udføres, så progresbaren bliver gjort afhængig af handlingen.
Avatar billede mugs Novice
23. august 2003 - 07:33 #18
Her er et eksempel på progressbar:

http://www.hugopedersen.dk/access/index.htm

Tryk på Access downloads. Jeg kan ikke komme ind på siden nu. eksemplet kl 07:25 kan jeg sende iaften (skal på arbejde), blot læg Jeres e-mail, hvis I er interesseret.
Avatar billede vanni Nybegynder
23. august 2003 - 14:01 #19
mugs> hvilken ActiveX?
Avatar billede mugs Novice
23. august 2003 - 20:01 #20
Jeg har 2:

Microsoft Progressbar Control version 5,0 (SP2)

Microsoft Progressbar Control 6,0 (SP4)
Avatar billede vanni Nybegynder
25. august 2003 - 08:17 #21
mugs> Er det kun mig, der synes referencelisten er mildt sagt uoverskuelig! For så vidt jeg kan se, er ovennævnte reference ikke på min liste. Måske du kan kaste lidt lys over problemet?

(Mange af referencerne starter med Microsoft et eller andet, det er måske ikke MS, der har konstrueret dem alle sammen eller hvad?)
Avatar billede mugs Novice
25. august 2003 - 16:15 #22
vanni > Når man taler om referencer, er det normalt kun referencer til andre programmer. Skal du eksportere til f.eks Word, skal du lave en reference til Microsoft Word, skal du eksportere til Excel, skal du have en reference hertil.
Disse referencer findes i kodemodulet > Funktioner > Referencer (Tools > References.

Det jeg tasler om her er et ActiveX objekt. Det indsætter du i formulardesign > Indsæt > ActiveX, i det vindue der popper op browswr du ned igennem og finder det objekt du ønsker.

Jeg skal ikke kunne sige, om du har en version af Access, der ikke understøtter et eller flere ActiveX-objekter.
Avatar billede vanni Nybegynder
26. august 2003 - 22:21 #23
jkron> Dejlig lille progressbar, virker meget fint.

mugs> Ok, jeg fik indsat ActiveX object'et. Omdøbte det til Progressbar og kan nu compilere, og køre din kode, men den får min form til at hakke, når jeg bladrer i mine records.

Ville det ikke være en ide at bruger timer med en DoEvent i stedet for den nderste løkke?
Avatar billede mugs Novice
27. august 2003 - 11:21 #24
vanni > Når formularen hakker, tror jeg det skyldes, at du har indsat koden i OnCurrent.

Prøv at indsætte flg. kode i en kommandoknap.

Dim i As Integer, j As Integer, k As Integer
Dim Tal(10000) as Integer
Progress.Min = 0
Progress.Max = 1
Progress.Value 0 1
Randomize
for i = 1 To 10000
Tal(i)=Int((10000 * Rnd) +1
Progress.Value = 1 / 10000
Next i


for i = 1 To 9999
Progress.Value = 1 / 10000
For j = i + 1 To 10000
If Tal(i) > Tal(j) Then
k = Tal(i)
Tal(j) = k
End If
Next j
Next 1
MsgBox "Slut."

Koden danner først tilfældige tal mellem 1 og 10000 og progressbaren viser hvor langt Access er kommet i forløbet.
Derefter "nulstilles" progressbaren og Access begynder nu at sortere tallene, medens progressbaren igen viser hvor Access er nåer i sorteringsprocessen.
Avatar billede vanni Nybegynder
02. september 2003 - 07:15 #25
I'm back! Tak for hjælpen
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