Avatar billede jberiksen Nybegynder
13. januar 2009 - 10:18 Der er 5 kommentarer og
1 løsning

Slå excel værdi op i Access

Jeg har et stort kalkulations-regneark, hvor jeg ønsker at indtaste et sagsnr. og så slår den sagsnavnet på i en Access-database og retunere værdien i en anden celle, nogen der vil hjælpe mig med det?

Grunden til jeg ikke laver det hele i Access er at det kalkulations-regneark er meget stort og komplext med mange og lange formler og mange faneblade
Avatar billede komputerdk Mester
13. januar 2009 - 11:59 #1
en måde er at lave en VBA macro med SQL forespørgsel

SQL = "select Felt_du_skal_bruge where sagsnummer =" & Excel_variabel

Er sagsnumrene unikke ?
Avatar billede jberiksen Nybegynder
13. januar 2009 - 14:10 #2
ja de er
Avatar billede komputerdk Mester
13. januar 2009 - 15:10 #3
Jeg har lavet en funktion, der hedder slaaop  (bruges ved at skrive =slaaop(celle)

nedenstående skal sættes ind i microsoft Visual basic editor (F11+CTRL > indsæt module  HUSK at vælge tools > reference > Ms active X 2.8 library

Function SlaaOp(sagsnr As String)

' ****** HUSK at vælge TOOLS > REFERENCE > Microsoft ActiveX data objects 2.8 library i arket i visual basic editor*******

Dim MyCon As New ADODB.Connection
Dim RS As New ADODB.Recordset 'til de data vi trækker ud fra recordsettet
Dim ConStr As String
Dim SQL As String
Dim y As Integer
ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db1.mdb;Persist Security Info=False" 'Databasen vi bruger , husk at ændre path
MyCon.ConnectionString = ConStr



' SQL forespørgslen Ved Where sættes variablerne ind fra excelarket
'vælg kun den info du skal bruge ellers skal du ændre længere nede i koden
SQL = "SELECT tabel.feltnavn2 " & _
"FROM Tabel WHERE (((Tabel.feltnavn1)= '" & sagsnr & "'))"

'Man kan med fordel lave forespørgslen i Acces og sætte den ind.. så efter Where skal man sætte sagsnr ind..


MyCon.Open 'åbner connection
       
RS.Open SQL, MyCon, adOpenDynamic 'åber sql'en



Do Until RS.EOF ' gør indtil der ikke er flere records med data

For x = 0 To RS.Fields.Count - 1 'kører det hele igennem kolonnemæssigt

SlaaOp = RS.Fields(x) 'man kan vælge en kolonne her..

Next
RS.MoveNext 'går videre til næste række - der bør ikke være nogen

Loop

MyCon.Close

End Function
Avatar billede jberiksen Nybegynder
13. januar 2009 - 18:34 #4
Når jeg skriver =slaaop(A2) får jeg bare #VÆRDI, har husket at aktivere referencen

min kode ser ud som følger

Function SlaaOp(sagsnr As String)


' ****** HUSK at vælge TOOLS > REFERENCE > Microsoft ActiveX data objects 2.8 library i arket i visual basic editor*******

Dim MyCon As New ADODB.Connection
Dim RS As New ADODB.Recordset 'til de data vi trækker ud fra recordsettet
Dim ConStr As String
Dim SQL As String
Dim y As Integer
ConStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=S:\Sager\sager.mdb;Persist Security Info=False" 'Databasen vi bruger , husk at ændre path
MyCon.ConnectionString = ConStr



' SQL forespørgslen Ved Where sættes variablerne ind fra excelarket
'vælg kun den info du skal bruge ellers skal du ændre længere nede i koden
SQL = "SELECT Sager.Sagsnavn1" & _
"FROM Sager WHERE (((Sager.Sagsnr1)= '" & sagsnr & "'))"

'Man kan med fordel lave forespørgslen i Acces og sætte den ind.. så efter Where skal man sætte sagsnr ind..


MyCon.Open 'åbner connection
       
RS.Open SQL, MyCon, adOpenDynamic 'åber sql'en



Do Until RS.EOF ' gør indtil der ikke er flere records med data

For x = 0 To RS.Fields.Count - 1 'kører det hele igennem kolonnemæssigt

SlaaOp = RS.Fields(x) 'man kan vælge en kolonne her..

Next
RS.MoveNext 'går videre til næste række - der bør ikke være nogen

Loop

MyCon.Close

End Function
Avatar billede komputerdk Mester
14. januar 2009 - 08:23 #5
der er en fejl her:

SQL = "SELECT Sager.Sagsnavn1" & _
"FROM Sager WHERE (((Sager.Sagsnr1)= '" & sagsnr & "'))"

SQL variablen er så SELECT Sager.Sagsnavn1FROM Sager WHERE  ==> du skal huske mellem rum efter sagsnavn1


en anden mulighed er at importere hele sagsdatabasen som Pivot (er ikke underlagt begrænsningerne med 65K rækker i office 2003 og tidligere) og så kode at den skal vælge samme sagsnummer og kopiere over..
Avatar billede komputerdk Mester
14. januar 2009 - 08:26 #6
det kan være en ide at lave det om til en SUB (dunno hvor stærk du er i VBA) og køre den trinvis og holde musen over variabelen.. eller lave en msgbox SQL for at tjekke variabler

jeg har også bandet mange gange over manglende mellemrum i SQLen.. (især når den fylder 10 linjer eller mere). Alternativt, kan man lave linje for linje ved

SQL = "select sager.sagsnavn1 " 'bemærk mellemrummet
sql = sql & "From Sager "

& _ laver lidt det samme (sammenkæder linjerne)
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