19. december 2003 - 00:25Der er
14 kommentarer og 1 løsning
Hente flere data fra Access
Hej Følgende VBA (med en mindre modifikation i SQL sætningen (hvor = er erstattet af BETWEEN)) henter data udfra Patient nr (hvert nummer repræsenterer en patient) fra access til excel og anbringer disse i en række - Dette fungerer som det skal.
Jeg vil imidlertid gerne kunne ændre koden således at jeg kan søge på en nummerrække ex: 03010-03010 (antallet kan selvfølgelig variere) og få returneret disse på samme måde - hver patient på sin egen række. Hvordan kan det gøres?
Sub HentDataTilLabels(TargetCell As Range) Dim DB As Database Dim Rs As Recordset Dim Ws As Worksheet Dim Path As String Set Ws = ActiveSheet Dim sqlstr As String Dim tmp As String Dim Navn As String
Kan du ikke lige uddybe det lidt ? Så vidt jeg husker er den en tom række mellem hver af dine patientoplysninger. Er det stadig rigtigt? Hvis du vil køre BETWEEN får du jo en lang række med mindre vi tager højde for det.
Underforstået at du mener i det modtagende ark skal det stå jvf ovenstående Offset blot med en patient pr række. De skal anvendes i en situation hvor sekretæren ønsker at udskrive labels på flere patienter på en gang (selekteret udfra patient nr). Den Liste som du tidligere har lavet til mig og som fungerer perfekt kan desværre kun være en patient af gangen. Between: Begrænses den ikke af de numre man taster ind: Mellem R03010-R03020 (11 stk?)
Her er et bud. Betragt det ikke som en hel løsning
Sub HentDataTilLabels(TargetCell As Range) Dim DB As Database Dim Rs As Recordset Dim Ws As Worksheet Dim Path As String Set Ws = ActiveSheet Dim sqlstr As String Dim tmp As String Dim Navn As String
Sub HentDataTilLabels(TargetCell As Range) Dim DB As Database Dim Rs As Recordset Dim Ws As Worksheet Dim Path As String Set Ws = ActiveSheet Dim sqlstr As String Dim tmp As String Dim tmp2 As String Dim Navn As String
'Her indsættes navn og sti tmp = InputBox("Fra") tmp2 = InputBox("Til")
sqlstr = "SELECT * FROM [Kartotek] WHERE [Patient nr] BETWEEN " & tmp & " AND " & tmp2 & " ;"
Set DB = Workspaces(0).OpenDatabase(Path, ReadOnly:=True) On Error GoTo notfound Set Rs = DB.OpenRecordset(sqlstr) x = 0 Set TargetCell = Range("A70") Do Until Rs.BOF With TargetCell .Offset(x, 0) = Rs.Fields("Patient nr") .Offset(x, -4) = Rs.Fields("Fornavn") & " " & Rs.Fields("Efternavn") .Offset(x, -2) = Rs.Fields("CPR nr") .Offset(x, 16) = Rs.Fields("Indkaldelse Dato") .Offset(x, 18) = Rs.Fields("Adresse") .Offset(x, 20) = Rs.Fields("Postnr og bynavn") x = x + 1 End With Rs.MoveNext Loop
Rs.Close DB.Close Set DB = Nothing Set Rs = Nothing Exit Sub
notfound: Rs.Close DB.Close Set DB = Nothing Set Rs = Nothing MsgBox "Ingen poster fundet" End Sub
Når: On error goto not found inaktiveres og man "stepper" ind i makroen fejler den ved: Set RS=DB.OpenRecordset(Sqlstr) og skriver: Run-time error '3463' Datatyperne stemmer ikke overens i kriterieudtrykket
Nå ved at kigge på vba du tidl har lavet og mindre ændringved BOF --> EOF lykkedes det:
Sub HentDataTilLabels() Dim DB As Database Dim Rs As Recordset Dim Ws As Worksheet Dim Path As String Set Ws = ActiveSheet Dim sqlstr As String Dim tmp As String Dim tmp2 As String Dim Navn As String
Path = "\\Hjertesrv\faelles\Lotte og Susanne\Registre\Patientregisteret.mdb"
sqlstr = "SELECT * FROM [2003Union] WHERE [Patient nr] BETWEEN'" & tmp & "' AND '" & tmp2 & ";'"
Set DB = Workspaces(0).OpenDatabase(Path, ReadOnly:=True) On Error GoTo notfound Set Rs = DB.OpenRecordset(sqlstr) X = 0 Set TargetCell = Range("I70") Do Until Rs.EOF With TargetCell .Offset(X, 0) = Rs.Fields("Patient nr") .Offset(X, -4) = Rs.Fields("Fornavn") & " " & Rs.Fields("Efternavn") .Offset(X, -2) = Rs.Fields("CPR nr") .Offset(X, 18) = Rs.Fields("Adresse") .Offset(X, 20) = Rs.Fields("Postnr og bynavn") X = X + 1 End With Rs.MoveNext Loop
Rs.Close DB.Close Set DB = Nothing Set Rs = Nothing Exit Sub
notfound: Rs.Close DB.Close Set DB = Nothing Set Rs = Nothing MsgBox "Ingen poster fundet" End Sub
Tak for hjælpen Tommy - Svar lige så du kan få point :0)
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.