24. august 2007 - 14:11Der er
11 kommentarer og 1 løsning
Excel - Query - databaseforespørgsel
Jeg har problemer med nedenstående macro.... Jeg vil gerne opdatere en forespørgsel - med et nyt vilkårligt nummer i databasen dvs. ændre 4194 til et andet nummer - fx. med en msgbox eller blot få macroen til at læse det nummer jeg taster i celle A1. Men... hvad skal jeg ændre i koden, for at den virker??
Sub Macro4() With Selection.QueryTable .Connection = Array(Array( _ "ODBC;DRIVER={Client Access ODBC Driver (32-bit)};COMPRESSION=0;LAZYCLOSE=1;CMT=0;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;LANGUAGEID=ENU;DF" _ ), Array("TPKGLIB=QGPL;DBQ=DTDDAN;SYSTEM=10.128.59.11;")) .CommandText = Array( _ "SELECT ZUFAPO.ZUFP_AUFTNR, ZUFAPO.ZUFP_AUFPOS, ZUFAPO.ZUFP_ARTNUM, ZUFAPO.ZUFP_ARTBEZ, ZUFAPO.ZUFP_BMENGE, ZUFAPO.ZUFP_BERTST, ARTSTM.ASS1_LAGBST, ARTSTM.ASS1_REIH01, ARTSTM.ASS1_FACH01" & Chr(13) & "" & Chr(10) & "FROM SERVER1." _ , _ "DTDDAN.ARTSTM ARTSTM, SERVER1.DTDDAN.ZUFAPO ZUFAPO" & Chr(13) & "" & Chr(10) & "WHERE ARTSTM.ASS1_ARTNUM = ZUFAPO.ZUFP_ARTNUM AND ((ZUFAPO.ZUFP_AUFTNR=4194) AND (ZUFAPO.ZUFP_AUFPOS>=100))" _ ) .Refresh BackgroundQuery:=True End With End Sub
Tilbage igen.... det fungerer 'næsten'.... på den måde at det har udløst et par andre problemer.
1) Opdatering medfører at der kan være færre linier end i foregående opdatering.... hvordan sletter man uden at gøre ravage ?
2) Hvordan markerer man det område, der indeholder data, og kopierer til en anden fil med 'pæn' formatering.
3)og hvordan gemmer man denne formaterede fil med et nyt navn, som indeholder &NR plus dags dato. ??
Jeg er klar over, at spørgsmålet er udvidet - og det skal nok blive belønnet, men jeg synes at der er sammenhæng i spørgsmplene her - som jeg gerne vil kunne anvende i en senere opgave af samme salgs.
1. Hvis den starter i A1, må du gerne slette fra række 2 og nedad, men aldrig række 1.
2. Jeg er i tvivl om du mener manuelt eller via kode, sådan her manuelt: Hvad mener du med 'pæn' formatering, som det står i din query.?? marker området, vælg kopier, gå over i den nye fil(ark), vælg sæt ind. så skulle den være i orden.
1) OK, var nervøs for om jeg kom til at slette "bindinger" til opslaget.
2) Ja, jeg mener Via koden - dvs. kopier til slags skabelonfil, som er præ-formateret som et skema (dvs. skal ikke kodes), men "kaldes" fra en skabelonmappe.... og efter kopieringen skal skabelonen gemmes med nyt filnavn == &NR-dags-dato.
Det, der er mit problem her er, at få koden åbne skabelonen, og at finde/markere området, som kun indeholder A1:[den sidste celle med data], fordi hver opdatering har variabelt antal rækker....
og så at gemme skabelonfilen med et navn, som består af [&NR og DagsDato]
Dim NR As Integer Sub Macro4() Range(Range("A2"), Range("A65536")).Rows.ClearContents ' tømmer arket fra A2 og ned
Range("A1").Activate NR = InputBox("Indtast nummer") With Selection.QueryTable .Connection = Array(Array( _ "ODBC;DRIVER={Client Access ODBC Driver (32-bit)};COMPRESSION=0;LAZYCLOSE=1;CMT=0;PKG=QGPL/DEFAULT(IBM),2,0,1,0,512;LANGUAGEID=ENU;DF" _ ), Array("TPKGLIB=QGPL;DBQ=DTDDAN;SYSTEM=10.128.59.11;")) .CommandText = Array( _ "SELECT ZUFAPO.ZUFP_AUFTNR, ZUFAPO.ZUFP_AUFPOS, ZUFAPO.ZUFP_ARTNUM, ZUFAPO.ZUFP_ARTBEZ, ZUFAPO.ZUFP_BMENGE, ZUFAPO.ZUFP_BERTST, ARTSTM.ASS1_LAGBST, ARTSTM.ASS1_REIH01, ARTSTM.ASS1_FACH01" & Chr(13) & "" & Chr(10) & "FROM SERVER1." _ , _ "DTDDAN.ARTSTM ARTSTM, SERVER1.DTDDAN.ZUFAPO ZUFAPO" & Chr(13) & "" & Chr(10) & "WHERE ARTSTM.ASS1_ARTNUM = ZUFAPO.ZUFP_ARTNUM AND ((ZUFAPO.ZUFP_AUFTNR=" & NR & ") AND (ZUFAPO.ZUFP_AUFPOS>=100))" _ ) .Refresh BackgroundQuery:=True End With End Sub
Public Sub Gem() Dim Sti As String Sti = "C:\data\" ' ret til hvor du vil gemme ActiveSheet.Copy ActiveWorkbook.SaveAs Filename:= _ Sti & NR & "_" & Date & ".xls", FileFormat:=xlNormal, _ Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _ CreateBackup:=False ActiveWindow.Close End Sub
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.