Avatar billede per2edb Praktikant
15. juli 2013 - 10:58 Der er 14 kommentarer og
1 løsning

Progress Bar

Jeg har et Excel Ark hvor en del VBA koder tager tid (Ca 10 sek)
Jeg har prøvet at lave en ProgressBar der skal visualisere det tager disse 10 sek. men det virker ikke.
Jeg kan ikke bruge metoden der følger et normalt Excel ark's udfyldelse (Google har masser af eksempler herpå).
Jeg ønsker en Proggress Baren's der skal være "selvkørende" i ca 10 sek.
Jeg har en Form: UserForm1 med Modal=False for at afviklingen af arket med koder ikke skal stoppes.
På formen har jeg lagt Controllen PrograssBar1

Private Sub UserForm_Activate(
    Call Main  ' Lagt i et modul
End Sub

I Modulet:

Sub Main
  UserForm1.ProgressBar1.Min = 10 
  UserForm1.ProgressBar1.Max = 30
  UserForm1.ProgressBar1.Visible = True
  UserForm1.ProgressBar1.Value = UserForm1.ProgressBar1.Min
end sub

Disse koder for bare at se en reaktion. Der er ingen?
Kan i hjælpe
Avatar billede store-morten Ekspert
15. juli 2013 - 16:41 #1
Lidt at lege med:

procesbar div.
http://gupl.dk/699037/
Avatar billede per2edb Praktikant
15. juli 2013 - 18:06 #2
Hej
Den er Modal True. Progress kører men eksekveringen af vba koderne startes først når Progress er færdig! Det er det der er mit problem

Hvordan får jeg kaldt vba koderne samtid med Progress køre??
Det skal startes uden button
Avatar billede supertekst Ekspert
15. juli 2013 - 18:16 #3
Hvordan ser den primære VBA-kode ud, som kører de ca. 10 sekunder?
Avatar billede per2edb Praktikant
15. juli 2013 - 18:33 #4
De fylder 3 scrol sider men her er essensen:


Private Sub Worksheet_Activate()

  UserForm1.Show <= spærrer for videre forløb

  HentDetail  <= Åbner access db og beregner en masse hvorefter beregningerne udskrives i Excel
 
Kommer ud her efter ca 10 sec hvis UserForm1.Show ikke spærrede

 
End Sub
Avatar billede store-morten Ekspert
19. juli 2013 - 18:01 #5
Hvordan ser "HentDetail" VBA-kode ud?
Avatar billede per2edb Praktikant
20. juli 2013 - 11:40 #6
Hej
Det står lige ovenfor.
Jeg forstår godt hvorfor du spørger. Normalt styres progressbar fra et alm simpelt Excel ark i takt med det udfyldes. Det tog mig 1 min at lave med et andet almindeligt Excel ark.
MEN nu er det som jeg skriver et ark med kun 0,1 % Excel udskrift (Hist og pist i celler og row) og ca 200 linier komplicerede vba koder med kald til Access og efterfølgende beregninger - det er her tidsforbruget ligger.
Jeg kan se 2 måder at løse det på:
1) En timer der får  baren til at køre f.eks 10 sek startet samtidigt med HentDetail tilgås uden denne stoppes. Men det kan jeg ikke få til at virke.
2) Et par kald inde fra HentDetail trigger progresbar og rykker baren fremad stepvis. Men hvordan laves det?
Avatar billede store-morten Ekspert
22. juli 2013 - 02:42 #7
Det var for at se om der var et loop i HentDetail der kunne bruges.

Om der hentes data.der beregnes og skrives. Step bar -->
Henter ny data der beregnes og skrives. Step bar -->
Henter ny data der beregnes og skrives. Step bar -->
OSV
Avatar billede per2edb Praktikant
22. juli 2013 - 13:45 #8
Måske er der en mulighed idet jeg har:

rs.Open "Select xx,yy,zz.........

With ActiveWorkbook.Sheets("Detail")
      .Range("C4").Value = rstProdukt.Fields(0).Value
      .Range("C1").Value = rstProdukt.Fields(1).Value
      .Range("C2").Value = rstProdukt.Fields(2).Value
      .Range("C3").Value = rstProdukt.Fields(3).Value
      .Range("C24").Value = rstProdukt.Fields(4).Value
.
.
.

End With

Kan du hjælpe med at tilpasse progressBar til at følge stepvis efter:
rs.Open.....  og C4, C1, C2 osv
Avatar billede store-morten Ekspert
22. juli 2013 - 18:54 #9
Du skal bruge et Loop alá denne test:

Sub Test_loop()

For a = 0 To 5
    MsgBox a
Next a

End Sub
Avatar billede per2edb Praktikant
23. juli 2013 - 08:39 #10
Den forstår jeg slet ikke?
Hvor skal den placeres
Hvordan kaldes progress bar
Avatar billede store-morten Ekspert
23. juli 2013 - 15:10 #11
Overstående kode er bare et eks. på et loop.

Det jeg efterlyser er et loop i din 200 liniers komplicerede vba kode, som vi ikke må se ;-)

Og derfor er det svært at hjælpe.
Avatar billede per2edb Praktikant
23. juli 2013 - 15:59 #12
Der er ikke en eneste loop. Der er 12 tabeller hentet fra Access samt en del SQL og VBA beregninger. Til sidst skrives ud som anført ovenfor:
 
.Range("C4").Value = rstProdukt.Fields(0).Value
.Range("C1").Value = rstProdukt.Fields(1).Value
osv
..
En loop er altså ikke en løsning.
Avatar billede store-morten Ekspert
23. juli 2013 - 17:47 #13
Jo, et loop, er løsningen, hvis du vil bruge en progress bar.

Kan du evt. bruge denne alternative løsning?
En popup tekstfelt, med teksten:
"Vent mens regnearket opdateres !!!"

http://gupl.dk/699297/
Avatar billede per2edb Praktikant
23. juli 2013 - 17:55 #14
Nej

Jeg har fået et tip.

Dim alertTime As Variant
alertTime = Now + TimeValue("00:00:01")
Application.OnTime alertTime, "Main"

men den hopper ikke hvert sec
Avatar billede per2edb Praktikant
24. juli 2013 - 16:37 #15
Jeg fik det desværre aldrig løst men lever med det næstbedste
hvor progressbar kaldes fra forskellige steder i programmet. Det giver ikke en glidende bevægelse som jeg ønskede, men dette er det bedst opnåelige
Vil i lave det så i kan få point
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
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

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