03. september 2003 - 12:41Der er
10 kommentarer og 1 løsning
Data til access
Jeg får hver uge tilsendt et excelark med lagerdata, excelarket indeholder flg. date, som jeg skal have overført til access:
A1: Dato A10-: Varenr. E10-: Salg. F10-: Lager.
Databasen er oprettet med to tabeller (Salg og lager), i hver tabel er første felt "Dato" og derefter følger "varenr". Jeg vil meget gerne have en makro til at fordele data.
Jeg giver stewen ret. du skal åbne en access database og oprette passende felter i en tabel hvor du ønsker dine data i Access. herefter anvender du wizzarden "hent eksterne data" i access. den vil guide dig til at overføre de data til de rigtige felter i access. du kan godt inspille en makro der henter data ved tryk på en knap men det kræver at excel filen hedder det samme og ligger det samme sted heletiden. herefter skal du 1. starte med at lave en import tabel i access hvor data først "lander" 2. herefter skal du køre en tilføjelses forespørgsel for at overføre data til dine egentlige tabeller 3. herefter slette importtabellerne igen.
Det er ikke det store problem at gøre det i excel, men jeg skal lige være heltsikker på hvor data skal hen.... Hvilke celler skal i Lagertabellen og hvad hedder felterne i access? Hvilke celler skal i Salgstabellen og hvad hedder felterne i access?
Jeg antager nu at "Lager"-tabellen indeholder tre felter Dato, varenr, og antal A1 skal i dato, A10 i varenr og F10 skal i antal Salg indeholder ligeledes 3 felter Dato, varenr, og antal A1 skal i dato, A10 i varenr og E10 skal i antal
Det første du skal gøre er under TOOLS i vbs-editoren klikke på References, finde "Microsoft DAO 3.6 Object library" og sætte flueben ved den.
I koden skal du lige ændre navnet på databasen. Kør så makroen og dine data skulle gerne havne i din accesdatabase. Har lige testet og det funker fint her.
Sub AddRecordsToAccess() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim ws As Worksheet 'Init Set ws = ActiveSheet Set db = OpenDatabase("C:\Testdatabase.mdb")
Set rs1 = db.OpenRecordset(Name:="Salg", Type:=dbOpenDynaset) With rs1 .AddNew .Fields("dato").Value = ws.Range("A1").Value .Fields("varenr").Value = ws.Range("A10").Value .Fields("antal").Value = ws.Range("E10").Value
.Update End With rs1.Close
Set rs2 = db.OpenRecordset(Name:="Lager", Type:=dbOpenDynaset) With rs2 .AddNew .Fields("dato").Value = ws.Range("A1").Value .Fields("varenr").Value = ws.Range("A10").Value .Fields("antal").Value = ws.Range("F10").Value
Sub AddRecordsToAccess() Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim ws As Worksheet 'Init Set ws = ActiveSheet Set db = OpenDatabase("C:\Testdatabase.mdb")
Set rs1 = db.OpenRecordset(Name:="Salg", Type:=dbOpenDynaset) With rs1 .AddNew .Fields("dato").Value = ws.Range("A1").Value .Fields("varenr").Value = ws.Range("A10").Value .Fields("antal").Value = ws.Range("E10").Value
.Update End With rs1.Close
Set rs2 = db.OpenRecordset(Name:="Lager", Type:=dbOpenDynaset) With rs2 .AddNew .Fields("dato").Value = ws.Range("A1").Value .Fields("varenr").Value = ws.Range("A10").Value .Fields("antal").Value = ws.Range("F10").Value
.Update End With rs2.Close
'close database db.Close
'Clean up Set rs1 = Nothing Set rs2 = Nothing Set db = Nothing End Sub
Jeg må indrømme at jeg har lidt svært ved at gennemskue din databasestruktur, men test lige det her.
Sub AddRecordsToAccess() Const StartRow As Long = 10 Dim db As Database Dim rs1 As Recordset Dim rs2 As Recordset Dim ws As Worksheet Dim EndRow As Long Dim FieldName As String Dim y As Long 'Init Set ws = ActiveSheet Set db = OpenDatabase("C:\Testdatabase.mdb") Set rs1 = db.OpenRecordset(Name:="Salg", Type:=dbOpenDynaset) EndRow = Range("A" & StartRow).End(xlDown).Row
With rs1 .AddNew .Fields("dato").Value = ws.Range("A1").Value For y = StartRow To EndRow FieldName = ws.Range("A" & y).Value .Fields(FieldName).Value = ws.Range("E" & y).Value Next .Update .Close End With
Set rs2 = db.OpenRecordset(Name:="Lager", Type:=dbOpenDynaset) With rs2 .AddNew .Fields("dato").Value = ws.Range("A1").Value For y = StartRow To EndRow FieldName = ws.Range("A" & y).Value .Fields(FieldName).Value = ws.Range("F" & y).Value Next .Update .Close End With
'close database db.Close
'Clean up Set rs1 = Nothing Set rs2 = Nothing Set db = Nothing End Sub
Hvis der stadig er problemer blver jeg nok nødt til at se databasen og regnearket med et par eksempeldata i. tommybak@netscape.net
har lavet en kombination af dine to forslag, så felterne hedder: Dato, Varenr., Salg, Lager. Det betyder at jeg kun har en tabel, men det virker.
Pointene har du fortjent.
Synes godt om
Ny brugerNybegynder
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.