11. januar 2005 - 13:23Der er
10 kommentarer og 1 løsning
Pause i makro/opdatering af database
Hej,
Er der nogen der ved hvordan jeg laver en pause inden et makro køres? Grunden til dette er at jeg har en automatisk opdatering af et excel-ark fra en SQL database og jeg vil gerne have at makroet først kører når databaseopdateringen er færdig. Er dette muligt?
Hvis det ikke går at gøre automatiskt er der så en mulighed for at sætte en timer ind, så at den feks køres efter 30-60 sekunder?
Her er mit makro: Sub Auto_Open()
Streng = MsgBox("Gul: Mindre end eller lig med 10 aktive sager!" & Chr(13) & "Grøn: Ingen aktive sager!" & Chr(13) & "Orange: Brev indenfor de sidste 30 dage!" & Chr(13) & "" & Chr(13) & "Husk at køre makro (ALT+F8 + ENTER) efter den automatiske opdatering!") RW = Range("A65536").End(xlUp).Row
For i = 3 To RW
If Cells(i, 2) = 0 Or Cells(i, 3) = 0 Then Range(Cells(i, 1), Cells(i, 16)).Interior.ColorIndex = 43 Else Range(Cells(i, 1), Cells(i, 16)).Interior.ColorIndex = xlNone End If
If Cells(i, 3) <= 10 Then Range(Cells(i, 3), Cells(i, 3)).Interior.ColorIndex = 6 Else Range(Cells(i, 3), Cells(i, 3)).Interior.ColorIndex = xlNone End If
If Cells(i, 7) >= Date - 30 Or Cells(i, 8) >= Date - 30 Or Cells(i, 9) >= Date - 30 Or Cells(i, 10) >= Date - 30 Or Cells(i, 11) >= Date - 30 Or Cells(i, 12) >= Date - 30 Or Cells(i, 13) >= Date - 30 Or Cells(i, 14) >= Date - 30 Or Cells(i, 15) >= Date - 30 Or Cells(i, 16) >= Date - 30 Then Range(Cells(i, 7), Cells(i, 16)).Interior.ColorIndex = 45 End If
Måske har det, måske har det ikke - det er det jeg ikke ved.
Jeg ved bare at når jeg åbner excel arket så venter databasen med at opdatere til det at makroet er eksekveret. Jeg håbede at der var en måde at makroet kunne vente til opdateringen fra databasen var klar :-)
Jeg har også set nogle "makro" hvor selve select koden er i et makro og ikke hentes ved at imporetere data (Data/importera externa data/...svenks excel). Hvis dette går, så burde jo ovenstående kode kunne lægges efter select koden?
Jeg tror de færreste kan forstå helt hvad du laver - når du åbner excel venter databasen med at opdatere..?
Hvad bliver opdateret i databasen og hvordan? Har databasen overhovedet noget med Excel at gøre? Hvad? Bliver opdateringen af databasen foretaget i din macro, eller hvordan???
Du kan sagtens hente data fra en database med en macro, det troede jeg egenligt var det du gjorde.
Der er ca. 100000 måder at gøre det samme på, så det er svært at hjælpe når jeg ikke ved hvad du egenligt laver ;o)
Når man importerer data fra en database så bruger Excel Ms Query - det er det jeg gør.
HER ER SPØRGSMÅLET TIL DATABASEN: select regdate, count(distinct actno) as no, count(distinct case when ClosureDate is null then ActNo else null end), sum(capital) as capital, min(actno) as [min act], max(actno) as [max act], min([Brev1]) as [Brev1], min([Brev2]) as [Brev2]
from ( SELECT CONVERT(datetime, a.RegDate, 104) as regdate, a.ActNo as actno, a.ClosureDate as ClosureDate, c.RegisteredCapital as capital, (select top 1 h.Time from nihist h(nolock) where Action = Brev1' and h.objecttype = 1 and h.objectno = a.actno) as [Brev1], (select top 1 h.Time from nihist h(nolock) where Action = 'Brev2' and h.objecttype = 1 and h.objectno = a.actno) as [Brev2]
FROM niAct a(NOLOCK), niDtMain b(NOLOCK), niDtInv c(NOLOCK)
WHERE a.ActNo = b.ActNo AND b.DebtNo = c.DebtNo AND a.CreditorNo = '139' AND a.RegDate BETWEEN '030101' and '041231'
) as tmp_table
group by regdate order by regdate
Makroet står jo foroven.
Om du kan hjælpe mig at få både Queryn og makroet som farver cellerne i samme makro er det perfekt.
Kan godt forstå hvis du ikke gider men jeg smider ind lidt ekstra points :-)
Nå, jeg ville nu hente data direkte fra en macro, ved at connecte til databasen og sende et SQL udtryk af sted. Altså ikke bruge Excel Ms Query, som jeg ikke kender til.
Du kalder bare din macro i bunden af din opdateringskode.
Nå, jeg ville nu hente data direkte fra en macro, ved at connecte til databasen og sende et SQL udtryk af sted. DET ER DETTE JEG VIL MEN JEG VED BARE IKKE HVORDAN :-)
Jeg kunne faktiskt godt starte makroet manuelt men der er ca. 20-25 brugere som ikke er gode til Excel (det er jeg jo heller ikke, men men! :-)
Hvis du kan/har lyst så må du gerne lave en connection til databasen via et makro til mig. Du får dine points aligevel, men det havde været kanon :-)
Der er jo 100 måder at gøre de samme ting på, og når man ikke ved præcis hvad du laver, kan det være svært at hjælpe - derfor alle disse irreterende spørgsmål fra min side;-) Når du skriver "opdatere en database" kan det betyde en HEL masse vidt forskelligt :o)
Opret en variabel i VBA, som skal indeholde en tabel (et recordset) Connect til databasen fra VBA vha en connectionstring
Herefter kan du f.eks.
*) Fyr en passende SQL-sætning af sted, som henter data fra databasen over i din variabel. *) Brug dine data til hvad du vil - indsæt dem i regnearket eller hvad ved jeg *) Opdater evt. dataene i databasen med en passende SQL
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.