Avatar billede dsj1972 Juniormester
27. oktober 2009 - 16:19 Der er 13 kommentarer og
1 løsning

Hente data fra access ind i excel

Hejsa,

Jeg har lavet et forsøg med at trække data fra access ind i excel og jeg har benyttet eks. fra denne her : http://www.eksperten.dk/spm/277875

Min kode ser sådanne ud:
----Macro modul----
Sub GetTable()
  Dim Db As Database
  Dim Rs As Recordset
  Dim Ws As Worksheet
  Dim Path As String
  Set Ws = ActiveSheet
  Dim sqlstr As String

  '*** sti til database ***
  Path = "C:\Kundedb.mdb"    'Her indsætter du navn og sti på din accessdatabase

  '*** SQL-streng med reference til A1 ***
  '**** dvs at den skal finde den record i access hvor Varenummeret er lig med det du har skrevet i A1
  sqlstr = "SELECT * FROM Kunder WHERE Kortnavn =" & Range("A1").Value & ";"


  '*** Hent data ***
  Set Db = Workspaces(0).OpenDatabase(Path, ReadOnly:=True)
  Set Rs = Db.OpenRecordset(sqlstr)
 
'*** Indsæt VareTekst i A5 og Disponent i A7 ***
  Ws.Range("D2") = Rs.Fields("Firmanavn")
  Ws.Range("D3") = Rs.Fields("Adresse")
  Ws.Range("C4") = Rs.Fields("Postnr")
  Ws.Range("D4") = Rs.Fields("Bynavn")

  '*** luk databasen igen ***
  Rs.Close
  Db.Close
 
End Sub

----ark modul----
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then Call GetTable
End Sub

Tabel = Kunder
Range("A1") = Kortnavn (som er en forkortet vers. af Firmanavn)

Men jeg får en fejl "3061" (Der var for få parameter. Der var ventet 1.)

Og jeg kan sgutte ikk rigtig hitte ud af hvad jeg gør forkert.

Er der nogen af jer eksperter som kan gennemskue hvad min fejl er???

På forhånd tak
dsj
Avatar billede dsj1972 Juniormester
27. oktober 2009 - 17:38 #1
Det er forresten denne linie den markere ved fejl:

Set Rs = Db.OpenRecordset(sqlstr)
Avatar billede staaholm Nybegynder
28. oktober 2009 - 08:39 #2
Brug Excell query til at hente dine data så går det som en leg.
Avatar billede dsj1972 Juniormester
28. oktober 2009 - 09:00 #3
Staaholm,

Tak for dit svar, men det kan jeg desværre ikk bruge til noget...
Bliver jo heller ikk rigtig klogere af at bare lave noget som er for let ;-)

Og prøvede nu koden fordi jeg gerne ville prøve noget nyt som jeg senere hen vil bruge til at automatisere en hel del af hvores system.

Men tak for forslaget.
Avatar billede staaholm Nybegynder
28. oktober 2009 - 12:10 #4
Jeg er ked af at du ikke vil bruge Query men hvis du bruger AOD skal du have en <activate connection> kommando ind i starten af programmet
Avatar billede dsj1972 Juniormester
28. oktober 2009 - 14:27 #5
Hvad jeg gerne ville var at finde ud af hvorfor den kode fejler, for det er som sagt en kode jeg har fundet i et ældre spm og desværre melder spm ikk noget om at koden virker eller ej, men dog er der masser andre spm som har samme kode eller meget lig den.

Så kunne egentlig godt tænke mig og vide hvorfor jeg netop får denne fejl.

Det kan jo være at jeg har misset nogle ting eller i det hele taget misforstået betydningen af den fejl meddelse.
Avatar billede staaholm Nybegynder
29. oktober 2009 - 10:31 #6
Undskyld men det lyder ikke som om du vil finde ud af det, beklager
Avatar billede dsj1972 Juniormester
29. oktober 2009 - 13:07 #7
Undskyld, men jeg forstår ikk lige hvad du mener med at jeg ikke vil finde ud af det......siger jo netop at jeg er interesseret i at finde ud af hvad den fejl skyldes.....ret mig gerne hvis jeg har skrevet forkert......for det var bestemt ikk min intention.
Avatar billede bak Forsker
29. oktober 2009 - 23:58 #8
Hvis varenummer i din database er defineret som en streng/tekst og ikke et tal så prøv at ændre denne linie

sqlstr = "SELECT * FROM Kunder WHERE Kortnavn =" & Range("A1").Value & ";"

til

sqlstr = "SELECT * FROM Kunder WHERE Kortnavn ='" & Range("A1").Value & "';"

Ændringen er de 2 '-tegn
Avatar billede bak Forsker
30. oktober 2009 - 00:00 #9
det er da lidt vanskeligt at se her
prøver lige igen. Du skal ikke lave de store mellemrum

sqlstr = "SELECT * FROM Kunder WHERE Kortnavn = '  " & Range("A1").Value & "  '  ;"
Avatar billede dsj1972 Juniormester
30. oktober 2009 - 00:38 #10
Hej Bak,

Kæft hvor er du god...godt gættet at det var en tekst streng og ikke en tal streng....men jeg havde nu godt nok prøvet det tegn syns jeg men så adskildte den bare....du ved lige som når man laver REM  men kan se nu at når tegnet er foran og bagved anførelses tegn så sker der ikk noget...



Men det virker smukt nu.....

Men kunne nu godt li at vide hvorfor man skal have 2 tegn sætninger i definitionen....det kunne godt virke ligt forvirrende...

Men fik ret, dine koder plejer nu ikk fejle noget, så der måtte være en lille fejl et sted som kunne fixes :-)

Men takker for super observation og hjælp.

Smid lige et svar så får du tildelt point.

mvh dsj
Avatar billede dsj1972 Juniormester
30. oktober 2009 - 00:42 #11
Hey,

Tror du at det er muligt at man kan lave indsætning i samme celle som man skriver i.

Eks.

A1 skriver jeg et kortnavn i som den så søger og finder post på i database og smider Firmanavn (svarende til det kortnavn) ind i A1 (altså overskriver det kortnavn man har skrevet)
Avatar billede bak Forsker
30. oktober 2009 - 15:08 #12
Det kan man i princippet godt. Man skal bare undgå at 'trigge' worksheet_change eventen igen når man indsætter resultatet af gettable i A1, således at man undgår en endeløs løkke.

i princippet kunne worksheet_change så se sådan ud, hvor Application.EnableEvents = False hindrer gentagelse:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
        Application.EnableEvents = False
        Call gettable
        Application.EnableEvents = True
    End If
End Sub
Avatar billede bak Forsker
30. oktober 2009 - 15:36 #13
og så et svar :-)
Avatar billede dsj1972 Juniormester
30. oktober 2009 - 17:41 #14
Som sædvanlig virker det smukt.....dine velfortjente point er tildelt :-)


Beklager Staaholm, men Bak gav mig svar på det jeg spurgte om og det var svar jeg kunne bruge til noget.


God weekend
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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