22. marts 2011 - 15:19Der er
28 kommentarer og 1 løsning
Hvordan henter jeg data fra Access database via en forespørgsel (i excel) over i Excel.
Har problemer med ovennævnte, er lidt af en newbie, men ikke 100%
Har på nettet fundet lidt kode, som jeg så udfra, har strikket denne kode sammen.: Public Sub Hent_Kunde()
' Deklarerer variabler
Dim vInput As Long Dim Sheetname As String Dim found As String
' Bruger det aktuelle Ark til dataene
Sheetname = ActiveSheet.Name
' Åbner database
Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\faktura\fakturaer.mdb;" Set rs = CreateObject("ADODB.Recordset")
'Spørger om Kundenavn - Kunne være kundenummer eller andet
found = InputBox("Indtast kunde", "Search")
' Søger i database, efter indtastede navn
strsql = "SELECT eq(Kunder.Fakturaer) AS found FROM Kunder;" ' Ser det rigtigt ud ?
If found = "" Then ' Her skal indsættes en fejlkode Exit Sub End If
'Bruger records fra Fakturaer.mdb tabel "Kunder" til at indsætte på Excelark _ 'Her er mine problemer...
With rs .Cell("B6") = .Fields("Firm1") 'Hvordan gøres dette ? '.Fields("Firm1") = Cells("B6").Update 'Hvordan gøres dette ? '.Fields("Firm2") = Cells("B7").Insert 'Hvordan gøres dette ? '.Fields("Adr1") = Cells("B8").Insert 'Hvordan gøres dette ? '.Fields("Adr2") = Cells("B9").Insert 'Hvordan gøres dette ? '.Fields("PostNr") = Cells("B10").Insert 'Hvordan gøres dette ? '.Fields("By") = Cells("C10").Insert 'Hvordan gøres dette ? '.Fields("E-Mail") = Cells("B11").Insert 'Hvordan gøres dette ?
End With
' Lukker databasen igen.
Set rs = Nothing cn.Close Set cn = Nothing Set CurrentChart = Sheets(Sheetname) Sheets(Sheetname).Select
End Sub
Håber nogen har en ide til hvordan man gør, gerne med en form, der "lader en rulle igennem de kendte adresse/kunder.
Hej Sifuentes. Nej ikke lige den vej, mere modsat, sådan at forstå, at hvis data er i access database, skal de overføres til bestemte celler i regnearket. Gerne med en slags "rullemenu". Har søgt som en gal på nettet og der er meget forskellige løsninger, men ingen passer rigtigt til min idé. Voy
Excel kan trække næsten hvad det skal være ud af en database, menuerne hedder: Importer Data, Webforespørgesel eller Dataforespørgsel. Men igen, er det virkelig det der er brug for? Er det ikke snarere en ren databaseløsning der er svaret? (det er en klassisk begynderfejl, tro mig)
Men har allerede en database, som jeg vil lave forespørgsler på. Når brugeren opdaterer og afsender en faktura, så skrives der til databasen, med indholdet i bestemte celler i regnearket. Altså data er tilstede, og skulle jo gerne kunne "genbruges" af Excel, når man skal køre en ny faktura. Har prøvet import af data, men det giver mig jo hele databasen og ikke en enkelt post.
Har ikke lige prøvet "databaseforespørgsel", vil kigge på den og evt. prøve at optage makroen... - Ellers gode idéer..
Hvad skal udtrækket af data bruges til i regnearket, (hvad er formålet med at hive data ud i excel, i forhold til at videreforarbjde dataene i en database, og evt. samskrive/sammenflette/filtrere/sammenholde dataene i databasen)? Er du i det hele taget vidende om mulighederne for databehandling i en database? Det har du i hvertfald ikke overbevist mig om.
Nej, database er heller ikke min stærke side, er newbie, men mente at jeg med fordel kunne, åbne en inputbox, og spørge brugeren om navnet, og hvis dette navn findes i databasen, så kopiere stamdata over i regnearket, hvis ikke, ville jeg lade brugeren indtaste nye stamdata, på den nye kunde, og Excel ville så lægge dette over i databasen, den del fungerer fint. Det er selve forespørgslen, og kopiering af aktuel record til Excel.
Håber du forstår hvad jeg ønsker at gøre. Om metoden er forkert eller ej, ved jeg ikke, det er jo blot en idé.
Vi skal til Mallorca, og det skal være sådan at vi kan se ud af vinduet undervejs, og vi skal også kunne komme på toiletet når nøden er størst. Derfor kører vi i bil hele vejen og tager færgen fra Barcelona til Palma De Mallorca. Lyder det ikke som nogle gode argumenter for valg af transportmiddel?
Du fortæller også at du har data liggende i hhv. Excel og Access, det skurrer med det samme i mine ører. Hvilke overvejelser ligger der bag disse valg.
Du fortæller ikke hvordan dine brugere (netværks)geografisk befinder sig når data indtastes.
Du fortæller helle ikke om det er et kritisk parameter at to brugere indtaster data på samme tid.
Der er i det hele taget en masse indforstået information tilstede her, men som er komplet uigennemskuelig for mig.
Hej Sifuentes Jo, årsagen er under designet af et let fakturaprogram i Excel, ville jeg benytte nogle af de ting der kom som input i regnearket, såsom Fakturabeløb, fakturadato, sidste betalingsdato, kundenavne og adresser og putte dem i en database og nogle tabeller, alt det er lykkedes, senere fik jeg så den ide at det jo var tosset at taste kundenavnene ind i databasen igen, når de måske allerede var der, så kunne man "genbruge" dem i regnearket. - og det er jo egentligt det spørgsmålet går ud på, hvordan det gøres. :-)
Det er kun et mindre system som afvikles på een maskine, lokalt hos ham selv (lille håndværker). Altså ikke noget med samtidige brugere, og ikke noget med netværk i denne forbindelse.
Er kun en "øvelse" som umiddelbart fungerer, men kunne gøres smartere..
Kan sagtens være der er meget smartere måder at gøre det på, men learning by doing and testing, har virket indtil nu :-)
Men du beskriver det selv skide godt, "nogle af de ting der kom som input i regnearket," og "jo var tosset at taste kundenavnene ind i databasen igen, når de måske allerede var der".
Regel nummer et når du arbejder med en datamat: "Er arbejdet gjort en gang skal samme arbejde aldrig udføres igen" (gør du det er du i gang med at lave noget lort), heraf afledes reglen om at data aldrig må forekomme redundant (ingen dubletter), altså enten findes data i databasen(hvorfra de udtrækkes) eller også findes de i Regnearket hvorfra de så kan udtrækes. De må aldrig forefindes begge steder.
Og så kan du så sige: "Uha Uha, de regler er jeg vidst kommet til at overtræde mange gange". Ja, og det må aldrig ske igen, ikke før det er korrekset, kan du være forvisset om at dit system virker optimalt. Det ville svare til at grave telefonkablet op for at se om det var ok.
*G* Du har delvist ret, data er ikke tilstede begge steder, undtagent når man gemmer faktura, så er kunden "synlig" på fakturaen på skærmen, indtil den ryddes, i databasen er ingen dubletter tilladt, hvis jeg undgår med en:
.Update On Error Resume Next
Men dette gælder kun for navnene og fakturanumre.
Kabbak (en ruger herinde), var sød at hjælpe mig der.
Håber du er med på problemet, og ved da godt at det er lidt "hjælpeløst" :-)
Har jeg forstået dit "problem" rigtigt? Du har et dataset i en access database med kundeoplysninger på diverse kunder, datoer osv. osv.; alle disse data ønsker du at kunne se i excel, enten til at bearbejde eller til at læse? Derudover har du lavet et excel-ark, men mangler nu at få de rigtige data ind i de rigtige felter når man henter den givne kunde i en database?
Har du fundet ud af at hente dataerne ind i excel, eller hvor præcist rammer du muren?
Undskylder på forhånd, men det lyder ikke som om at Sifuentes kommer med noget brugbart, andet en at forklare hvorfor metoden skulle være dårlig; fremfor blot at hjælpe med det trådstarter i virkeligheden spørger om.
Støder ind i muren, der hvor data skal sammenlignes med brugerinput, kunne være et firmanavn, hvis data er i databasen, skal data med firmaoplysningerne Adresser, navne o.s.v. læses over i Excel på de rigtige felter.
Har prøvet forskellige tillempede løsninger, men har endnu ikke en fungerende løsning.
Okay, men du kan godt finde ud af at få data fra access og ind i excel; problemet er der hvor du skal sammenligne existerende data med brugerinput?
En simpel løsning vil være at lave et ark hvori du henter alle kundenavne ind; derefter kan du på dit brugerark (eller hvad du kalder det), lave en dropdown hvorfra brugeren kan vælge kunden; og hvis den ikke eksisterer, så indtaste en ny i stedet (og gemme i access-databasen også).
Så istedet for at lave en søgefunktion, så kan brugeren vælge på en dropdown (hvor den laver auto-udfyld, så kundenavnet kommer frem når man begynder at taste (givet den findes)).
Ja kan godt læse indholdet indi Excel, og skrive data fra Excel til Database. Så den løsning havde jeg nu også leget lidt med, men syntes dog den var lidt "lappet" ;-) selvfølgelig er det en funktionel løsning, så tror jeg vil bakse lidt videre med den idé :-)
Takker foreløbigt for hjælpen.
Men kan du så evt. sige mig hvordan jeg læser data ind i excel fra databasen og ind i et regneark, på forskellige celler, i stedet for at læse dem ind i samme række ? Altså at opdele data fra databasen....
Hvis vi nu forudsætter at du har et regneark for sig, hvori befinder sig samtlige kundedata fra databasen(dette kan nemt gøres ved hjælp af en Databaseforespørgsel, der ligger hjælp at hente om dette emne i Excel Hjælpen), dataforespørgslen skal selvfølgelig udføres før opslag laves, ellers er data ikke friske.
Det vil så ved hjælp af funktionen Lopslag være muligt at lave et opslag i dette ark, funktionens virkemåde er også beskrevet i Hjælp. Udfra Lopslags returnerede værdi kan postens absolutte placering i arket udledes og på den baggrund kan relevante data uddrages. Evt. skal først testes om den overhovedet har fundet noget, for har den ikke det eksistere kunden ikke, eller brugeren har lavet en tastefejl.
Hvis du skal have dataerne ind i forskellige celler, altså en række for hver række du søger du fra databasen må du lave en løkke. Først ville jeg definere en startplacering, f.eks.
Dim Location as Range Dim coln, rown as Long
Set Location = Range("A1") coln = Location.Column rown = Location.Row
Derefter ville jeg så lave en løkke hvori du placerer dataerne i cellen (coln, rown).
Du kan lave en løkke der hedder noget lign.:
Do until rs.EOF
Cells(coln, rown).value = rs.Fields("navn på felt 1") Cells(coln + 1, rown).value = rs.Fields("navn på felt 2")
rown = rown + 1 Loop
Eller sådan noget lign., så får du alle dine data ud på et seperat art startende i celle A1. Du kan på google finde en mere detaljeret beskrivelse af ovenstående; men du skal have fat i en løkke der kører fra første rs til den sidste rs (rs.EOF).
Mht. Lopslag så forudsætter det at du har unikke værdier; hvis der er flere kunder der f.eks. hedder "Nielsen" eller hvad de nu er kategoriseret som, så vil du skulle udvide din søgning, da Lopslag altid returnerer den først fundne værdi.
Takker for input. Jam skal have data ind i forskellige celler i et forud fremstillet ark, hvor detaljerne skal bruges til at lave et adressehovede til fakturaer.
Derfor er det lidt tricky, da jeg ved at bruge Excel´s funktion til at hente data fra Access, database, ligger de enkelte firmaoplysninger i samme række.
Altså er outputtet:
Firm1, Firm2, Addr1, Addr2, PostNr, By, E-Mail
og ikke:
Firm1 Firm2 Addr1 Addr2 PostNr, By E-Mail
Derfor havde jeg brug for at splitte det lidt op, men den er jeg sikker på du har fattet ;-)
Vil dog lege med de forslag der kommer op, der er mange gode ideer.
Ah okay, men det er bestemt heller ikke noget problem.
Skal du have alle dine rækker ud ved siden af hinanden så, så der står:
Firm1 Firm1 Firm2 Firm2 Addr1 Addr1 Addr2 Addr2 PostNr, By PostNr, By Email Email
Hvis ja, så er det bare i løkken at rælle en række ned hver gang man har sat et felt ind, så det bliver modsat før, og så til sidst lægger en til kolonnen.
Do until rs.EOF
Cells(coln, rown).value = rs.Fields("navn på felt 1") Cells(coln, rown + 1).value = rs.Fields("navn på felt 2") osv. osv.
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.