Avatar billede mhp_dk Nybegynder
04. juni 2004 - 22:05 Der er 15 kommentarer og
1 løsning

ODBC link opdateres auto. og gem ændringer

Jeg har 5 Excel ark med ODBC link, jeg vil gerne have dem til at åbne automatisk på en server hver nat f.eks. kl.01.00 og 02.00 osv., herefter opdateres via ODBC linket også skal arket gemmes også skal excel lukkes ned igen.

Er der nogle der har gode forslag til dette ?
Avatar billede asol Nybegynder
04. juni 2004 - 22:32 #1
Måske du kan bruge Application.Ontime

/asol
Avatar billede bak Forsker
05. juni 2004 - 00:04 #2
Hvis excel er lukket kan du ikke bruge ontime.
Brug Windows Opgavestyring til at starte excel på de rette tidpunkter med de rette filer.
Lad datahentning ske ved åbning af filerne.
Lad opgavestyring afslutte dem igen eller lav en makro der gemmer og lukker efter query_refresh.
Avatar billede mhp_dk Nybegynder
05. juni 2004 - 09:52 #3
bak, det er nogenlunde også så langt jeg er kommet, men det svære (for mig) er at lave en macro der gemmer og lukker efter query_refresh, kan du hjælpe der ?
Avatar billede bak Forsker
05. juni 2004 - 10:28 #4
Yeps. Idet jeg går ud fra at du kun har een query i hver fil er opskriften nogenlunde således.

I VBA opretter du et nyt ClassModule ("Class1")
I den indsætter du følgende kode
Public WithEvents qtQueryTable As QueryTable

Private Sub qtQueryTable_AfterRefresh(ByVal Success As Boolean)
If Success = True Then
    ThisWorkbook.Save
    Application.Quit
    Else
    qtQueryTable.Refresh
End If
End Sub

Sub InitQueryEvent(QT As Object)
    Set qtQueryTable = QT
End Sub


Nu opretter du så et almindeligt modul og indstætter følgende


Dim clsQueryTable As New Class1

Sub RunInitQTEvent()
    clsQueryTable.InitQueryEvent QT:=Sheets("Ark1").QueryTables(1)
End Sub

I Modulet Thisworkbook indsætter du så en Workbook_Open procedure der kalder subben i det almindelige modul

Private Sub Workbook_Open()
Call RunInitQTEvent
End Sub

Når filen åbnes vil Workbook_Open() køre automatisk og RunInitQTevent vil så initialisere klassemodulet.

Prøv det.....
Avatar billede mhp_dk Nybegynder
05. juni 2004 - 10:33 #5
Jeg har desværre flere queries.. men det kan jeg vel styre med med hvilket ark det skal se på ?
Avatar billede bak Forsker
05. juni 2004 - 10:48 #6
Ja, du skal bare sikre at det kun er den sidste der kigges, for makro lukker jo excel umiddelbart efter :-)
Avatar billede mhp_dk Nybegynder
05. juni 2004 - 10:53 #7
Hvis nu jeg tilføjer en query mere, som kunne hedde lukning som bare finder dato så jeg har sidste opdateret, hvordan sikre jeg så at denne query bliver den sidst opdaterede, er det bare rækkefølgen i hvordan de bliver lagt ind ?
Avatar billede bak Forsker
05. juni 2004 - 17:31 #8
Jeg ved det faktisk ikke. Jeg vil dog tro at den sidste er det der findes på sidste ark, hvis man skal følge excels normale logik.
Man kunne også slå autoopdatring fra og lade workbook_open kalde en makro der bestemmer rækkefølgen..
Avatar billede mhp_dk Nybegynder
07. juni 2004 - 08:29 #9
Ja det var alletiders ide, så er jeg også fri for at skal alle queries igennem for at sætte autoupdate op dem. Kan du hjælpe med VBA til den også ?
Avatar billede bak Forsker
07. juni 2004 - 10:26 #10
du kan kalde nedenstående makro fra fx. workbook_open.
Jeg er dog lidt usikker på om den venter med at gemme og lukke til sidste query har kørt, men jeg kan ikke rigtig teste det. (har dog en løsning, hvis dette ikke er tilfældet).

test den og vend tilbage.




Sub testme()
Dim wsh As Worksheet
Dim qtb As QueryTable
For Each wsh In ThisWorkbook.Worksheets
    For Each qtb In wsh.QueryTables
        qtb.Refresh
    Next
Next
ThisWorkbook.Save
Application.Quit
End Sub
Avatar billede mhp_dk Nybegynder
07. juni 2004 - 12:02 #11
Det med at lukke ned efter opdatering af sidste ark køre fint, men det sidste med at kalde makro fra workbook_open er jeg desværre ikke helt med på, den skal selvfølgelig kalde det når jeg åner excel men jeg er ikke så stærk i dette, skal workbook_open tilføjes og hvordan ?
Avatar billede bak Forsker
07. juni 2004 - 12:28 #12
Det nemmeste for dig er at omdøbe subben til Sub Auto_Open
Så vil den blive kørt automatisk når regnearket åbnes

Sub Auto_Open()
Dim wsh As Worksheet
Dim qtb As QueryTable
For Each wsh In ThisWorkbook.Worksheets
    For Each qtb In wsh.QueryTables
        qtb.Refresh
    Next
Next
ThisWorkbook.Save
Application.Quit
End Sub
Avatar billede mhp_dk Nybegynder
07. juni 2004 - 12:49 #13
Mener du at ThisWorkbook skal se sådan ud:
(Sikkert ikke men hvor skal det så indsættes)

Private Sub Workbook_Open()
Call RunInitQTEvent
End Sub

Sub Auto_Open()
Dim wsh As Worksheet
Dim qtb As QueryTable
For Each wsh In ThisWorkbook.Worksheets
    For Each qtb In wsh.QueryTables
        qtb.Refresh
    Next
Next
ThisWorkbook.Save
Application.Quit
End Sub
Avatar billede bak Forsker
07. juni 2004 - 14:00 #14
Nej ikke helt sådan...
Det her skulle være løsningen. (i Thisworkbook)
Bare slet det der var i forvejen

Private Sub Workbook_Open()
Dim wsh As Worksheet
Dim qtb As QueryTable
For Each wsh In ThisWorkbook.Worksheets
    For Each qtb In wsh.QueryTables
        qtb.Refresh
    Next
Next
ThisWorkbook.Save
Application.Quit
Avatar billede mhp_dk Nybegynder
07. juni 2004 - 14:17 #15
Den fejlede med at den manglede en end sub så det skrev jeg ind i bunden, så opdatere den godt nok og gemmer, men lukker ikke ned bagefter, og selve opdateringen tog også noget længere tid.
Avatar billede mhp_dk Nybegynder
31. oktober 2005 - 10:59 #16
.
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