20. august 2003 - 23:14Der 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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.
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.
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.
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.
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?
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.
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.
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
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.
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.
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?)
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.
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?
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.
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.