04. juni 2004 - 22:05Der 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.
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.
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 ?
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.
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 ?
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..
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
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 ?
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
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
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
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.
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.