13. januar 2009 - 10:18Der 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
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
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
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..
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
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.