Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1368to1372
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Daten von Excel nach Access übergeben

Daten von Excel nach Access übergeben
23.07.2014 15:43:55
Excel
Hallo,
ich möchte eine Tabelle non excel nach Access übergeben, aber es klappt nicht.
Ich versuche seit Stunden, dass ich über VBA eine Tabelle aus Excel in meine Datenbank nach Access übertrage.
Ich habe in Excel 2 Tabelle erstellt, die nun in Access weiter verarbeitet werden sollen. Ich habe es inzwischen schon geschafft, über VBA meine Datenbank zu öffnen. Aber das übertragen geht gar nicht. Beide Tabellen sind in Access auch vorhanden und sollen praktisch nur aktualisiert werden. Nach der Berechnung in Access soll das Ergebniss dann wieder zurück nach Excel, aber soweit bin ich noch gar nicht. Hat jemand eine Idee wie ich sowas hinbekomme?
Bei uns wird eigentlich nicht mit Access gearbeitet, darum versuche ich es für den Anwender auch so zu gestallten, das er in Access nichts tun muss. Er Drückt praktisch auf einen Knopf, das System rechnet und er bekommt seine Zahlen, ohne das er in Access was machen muss.
Wie bekomme ich sowas denn hin?

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten von Excel nach Access übergeben
23.07.2014 21:59:52
Excel
Hallo,
hier mal ein Beispiel aus einem Projekt von mir. Nicht vergessen den Verweis auf die Access Bibliothek zu setzen. Der Rest ist simpel.
'Variablen füllen
Path = Tabelle1.Range("PathDB")
Tabelle = Tabelle1.lst_Tabelle
'Initialisieren der Verbindung
dbverbindung.Open "provider = microsoft.ACE.OLEDB.12.0;" _
& "Data Source = " & Path
'--------------------------------------------------------------------------------
'Öffnet die Excel Datei aus dem Listenfeld "lst_Quelle"
Set WkBk = Workbooks.Open(Tabelle1.lst_Quelle, UpdateLinks:=False, ReadOnly:=True)
Do Until WkBk.Sheets(1).Cells(i, 1) = ""
If i Mod 100 = 0 Then
Application.StatusBar = "Datensatz: " & i
End If
Wert = WkBk.Sheets(1).Cells(i, 12)
'SQL String definieren
SQL = "INSERT INTO " & Tabelle & _
" (FK_BC, Kostenstelle, FK_Kostenart, FK_Partner, FK_PartnerPC, Sender_Empfaenger, FK_Monat, FK_Herkunft, FK_Szenario, Wert, Ladezeit, Jahr) " & _
"Values ('" & WkBk.Sheets(1).Cells(i, 1) & _
"', '" & WkBk.Sheets(1).Cells(i, 3) & _
"', '" & WkBk.Sheets(1).Cells(i, 5) & _
"', '" & WkBk.Sheets(1).Cells(i, 7) & _
"', '" & WkBk.Sheets(1).Cells(i, 9) & _
"', '" & WkBk.Sheets(1).Cells(i, 11) & _
"', '" & Zeit & _
"', '" & strObjekt & _
"', '" & Szenario & _
"', '" & Wert & _
"', '" & Ladezeitpunkt & _
"', '" & Jahr & _
"'); "
'Reinschießen
On Error GoTo Errorhandler_1:
Rs.Open SQL, dbverbindung
DoEvents
i = i + 1
Loop
MsgBox i - 4 & " Werte wurden übertragen"
'Aufräumen
dbverbindung.Close
WkBk.Close
Set WkBk = Nothing
Exit Sub
Errorhandler_1:
MsgBox "Es wurde ein Fehler festgestellt in Zeile: " & i & vbNewLine & _
"Folgender SQL Befehl konnte nicht ausgeführt werden: " & SQL & vbNewLine & vbNewLine & _
"Fehlernummer: " & Err.Number & vbNewLine & _
"Fehlerbeschreibung: " & Err.Description
'Aufräumen
dbverbindung.Close
WkBk.Close
Set WkBk = Nothing
Bei Fragen jederzeit gerne.
Viele Grüße
Hendryk

Anzeige
AW: Daten von Excel nach Access übergeben
24.07.2014 09:31:04
Excel
Hallo Hendryk,
ich verstehe es nicht wirklich.
Im Moment sieht sieht mein VBA Kunstwerk so aus:
Sub AccessAufrufen()
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase ("I:\logistik_mtu.p\19_Inventory\02_Tools\WOrking Capital -  _
Reporting\Anwendungen\OP - Mappe\Access-Datenbank.accdb")
appAccess.Visible = True
appAccess.UserControl = True
appAccess.DoCmd.OpenTable "TB-Umsatzkosten"
End Sub
Es öffnet mir meine Access Datenbank und auch meine Tabelle.
Jetzt sollten in die Tabelle TB-Umsatzkosten die neuen Daten, doch da kommt mein Problem. Ich hab keine Ahnung wie ich die da reinbekomme.
Vielen Dank für Deine Hilfe

Anzeige
AW: Daten von Excel nach Access übergeben
24.07.2014 11:57:53
Excel
Hallo Harald,
dass die Datenbank geöffnet wird ist doch schon mal gut! Die Tabelle brauchst du nicht explizit öffnen, sondern sprichst diese direkt per SQL aus Excel an. (Bei mir im Code unter SQL String definieren)
SQL = "INSERT INTO table_name (Spalte1,Spalte2,spalte3,...)
VALUES (Wert1,Wert2,Wert3,...);
Mit dem Befehl
Rs.Open SQL, dbverbindung
schießt du den SQL in die Datenbank
Garniert mit einer Schleife um den SQL, kannst du relativ einfach ein komplettes Worksheet nach Access laden.
Am besten du stellt ein Beispiel ein und teilst uns die Parameter der Access Tabelle mit, dann kann man dein Problem besser nachvollziehen.
Viele Grüße
Hendryk

Anzeige
AW: Daten von Excel nach Access übergeben
28.07.2014 11:34:34
Excel
Hallo Hendryk,
es klappt schon ganz gut, alle Tabellen werden geladen und die Abfragen gestartet. Jetzt hab ich nur noch ein Problem. Wie bekomme ich mein Ergebnis zurück ins Excel?
Sub AccessAufrufen()
' Variable  festlegen
Windows("Tool Einstieg.xlsm").Activate
Sheets("SD-Struktur Tool").Visible = True
Sheets("SD-Struktur Tool").Select
Dim ACDB As String
ACDB = Range("BL353") 'Access Datenbank
Dim TB_Zuordnung As String
TB_Zuordnung = Range("BL362") 'TB_Zuordnung
Dim TB_Projektart As String
TB_Projektart = Range("BL365") 'TB_Projektart
Dim TB_Programmgr As String
TB_Programmgr = Range("BL368") 'TB_Programmgruppen
Dim TB_Planungspos As String
TB_Planungspos = Range("BL371") 'TB_Planungspositionen
Dim TB_Faktor As String
TB_Faktor = Range("BL374") 'TB_Faktor
Dim TB_Bestandsart As String
TB_Bestandsart = Range("BL377") 'TB_Bestandsart
Dim Umsatzkosten As String
Umsatzkosten = Range("BL389") 'Umsatzkostentabelle
Dim AufteilungProg As String
AufteilungProg = Range("BL392") 'Aufteilung Programmgruppen
Dim AufteilungPLPos As String
AufteilungPLPos = Range("BL395") 'Aufteilung Planungspositionen
Dim Reichweiten As String
Reichweiten = Range("BL398") 'Reichweiten
' Öffnen Access Datenbank
Dim appAccess As Object
Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase (ACDB)
appAccess.Visible = True
appAccess.UserControl = True
'appAccess.DoCmd.OpenTable "TB-Umsatzkosten"
' Laden Tabelle "Zuordnungen"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Basis_Zuordnung")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Basis_Zuordnung", TB_Zuordnung, _
True
' Laden Tabelle "Projektart"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Basis_Projektart")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Basis_Projektart",  _
TB_Projektart, True
' Laden Tabelle "Programmgruppen"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Basis_Programmgruppen")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Basis_Programmgruppen",  _
TB_Programmgr, True
' Laden Tabelle "Planungspositionen"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Basis_Planungspositionen")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Basis_Planungspositionen",  _
TB_Planungspos, True
' Laden Tabelle "Faktor"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Basis_Faktor")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Basis_Faktor", TB_Faktor, True
' Laden Tabelle "Bestandsarten"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Basis_Bestandsarten")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Basis_Bestandsarten",  _
TB_Bestandsart, True
' Laden Tabelle "Umsatzkosten"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Umsatzkosten")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Umsatzkosten", Umsatzkosten,  _
True
' Laden Tabelle "Aufteilung Planungspositionen"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Aufteilung_Planungspositionen")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Aufteilung_Planungspositionen", _
AufteilungPLPos, True
' Laden Tabelle "Aufteilung Programmgruppen"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Aufteilung_Programmgruppen")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Aufteilung_Programmgruppen",  _
AufteilungProg, True
' Laden Tabelle "Reichweiten"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.RunSQL ("DELETE FROM tb_Reichweiten")
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.TransferSpreadsheet acImportDelim, , "tb_Reichweiten", Reichweiten,  _
True
' Abfrage starten "Aufteilung nach Programmen"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.Hourglass True
appAccess.DoCmd.OpenQuery "abUmsatzkostenAufteilungProgramm"
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.Hourglass False
' Abfrage starten "Aufteilung nach Planungspositionen"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.Hourglass True
appAccess.DoCmd.OpenQuery "abUmsatzkostenAufteilungPlanungsposition"
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.Hourglass False
' Abfrage starten "Umsatzkosten je Bestandsart"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.Hourglass True
appAccess.DoCmd.OpenQuery "abUmsatzkostenjeBestandsart"
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.Hourglass False
' Abfrage starten "Bestand Basisdaten"
appAccess.DoCmd.SetWarnings False
appAccess.DoCmd.Hourglass True
appAccess.DoCmd.OpenQuery "abBestandBasisdaten"
appAccess.DoCmd.SetWarnings True
appAccess.DoCmd.Hourglass False
' Export Excel
appAccess.DoCmd.TransferSpreadsheet acExport, 8, "abBestandBasisdaten", "M:\Access1. _
xlsx", True, ""
End Sub
Ich hab es mal versucht einfach ins M Laufwerk zu speichern. Lieber wäre es mir eigentlich wenn es in meine geöffnete Exceldatei geschrieben wird. Aber beides geht nicht.
Ich bekomme immer den Fehler das eine aktualisierbare Abfrage verwendet werden muss?
Danke für die Hilfe
Gruß
Harry
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige