Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
916to920
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
916to920
916to920
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Daten aus Access nach Excel und zurück nach Access

Daten aus Access nach Excel und zurück nach Access
18.10.2007 07:51:03
Kasimir
Hallo Leute,
ich habe da mal eine Frage zum Datenaustausch zwischen Excel und Access. Das importieren der Access-Daten ist weniger das Problem, das funktioniert ja in Excel durch externe Daten importieren. Was mich aber nun interessiert, bekomme ich die Daten auch wieder irgendwie zurück in die Tabellen von Access?
Ich habe das mal in Access mit „externe Daten - Tabellen verknüpfen“ versucht. Das ist ja eigentlich nicht schlecht und funktioniert in Excel recht gut. Nur leider funktionieren dann einige Dinge in Access nicht mehr. Wenn ich dort einen Datensatz löschen möchte, geht das nicht mehr oder wenn ich etwas ändern möchte funktioniert das auch nicht mehr. Daher dachte ich, ich hole mir die Daten aus Access in Excel hinein, füge Datensätze hinzu und schicke die wieder an Access zurück. Nur wie, bzw. geht das überhaupt von Excel aus?
Wäre für jeden Tipp und jede Hilfe dankbar.
Gruß,
Kasimir

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Daten aus Access nach Excel und zurück nach Access
18.10.2007 09:26:31
Luschi
Hallo Kasimir,
schau Dir mal diesen Beitrag an: https://www.herber.de/forum/archiv/908to912/t909721.htm#909721
Da habe ich für einen anderen User 1 Beispiel gemacht. Das paßt genau zu Deinem Problem.
Aber dafür muß man schon ein bischen tiefer in die Vba/ADODB-Kiste greifen.
Hier werden die Daten mit/ohne Bedingung aus Access nach Excel geholt, Datensätze verändert/gelöscht/neu erzeugt und zum Schluß wieder nach Acces zurückgeschrieben.
Dies ist aber nur 1 einfaches Beispiel. Sollten in Access verknüpfte Tabellen mit ins Spiel kommen, dann wird es wesentlich komplizierter. Aber nur Mut!
Gruß von Luschi
aus klein-Paris

Anzeige
Das ist schon mal super, aber....
18.10.2007 11:19:52
Kasimir
Hallo Luschi,
danke Dir für Deine Antwort. Deine Beispieldateien haben mir enorm weiter geholfen. Ich habe das nun mal versucht auf meine DB abzuändern. Das Importieren der Daten funktioniert. Nur beim Exportieren nach Access hakt es noch. Ich habe das Makro zum Exportieren insoweit abgeändert, das ich in der Zeile, in der es um das Suchen in der Accestabelle geht, etwas gelöscht habe, da mein Typ der Spalte nicht Text, sondern Zahl ist. Nachfolgend mal das Makro, wie es im Moment aussieht.

Sub ExportToAccess()
Dim xRows As Long
xRows = 434
'xRows: Anzahl der Zeilen in der Excel-Tabelle
'alle Datensätze in der Exceltabelle, die in der Spalte 'A' mit blauer _
Schrift formatiert sind, werden in die Access-DB zurückgeschrieben
'mit dem Save-Button wird diese Formatierung erzeugt _
'Nach dem Zurückschreiben in die Access-DB wird die schriftfarbe wieder auf schwarz gesetzt
Dim Cnn As ADODB.Connection, _
cmd As ADODB.Command, _
Rs As New ADODB.Recordset
Dim rg1 As Range, rg2 As Range, _
rs1 As ADODB.Recordset
Dim Master As Workbook, _
j As Integer, i As Integer, _
db_Path As String, db_MDB As String, db_View_dummy As String, _
sqlText As String, mdb_Table As String, xls_Table As String, _
s1  As Integer, s2 As Integer, s3 As String, s4 As String, s5 As String,  _
_
ok As Boolean, vw As Object
Dim d1 As Date, d2 As Date
'bestimmte Applications-Eigenschaften abschalten, damit es schneller geht
GetMoreSpeed True
Set Master = ThisWorkbook
db_Path = Master.Path & "\"
db_MDB = "Lauf2006_Fichtelgebirgsmarathon.mdb"
'da Database in Access & ADODB ein schütztes Objekt-Wort ist, habe ich den Namen umbenannt
mdb_Table = "Teilnehmer"
xls_Table = "Data"
'Tabellenbereich in der Exceltabelle'
Set rg1 = Master.Worksheets(xls_Table).Range("A2:A" & xRows)
''Verbindung zur DB
Set Cnn = New ADODB.Connection
Cnn.Open "Provider =Microsoft.Jet.OLEDB.4.0; Data Source = " & db_Path & db_MDB & ";"
Rs.Open mdb_Table, Cnn, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
For Each rg2 In rg1
'Erkennungszeichen für 1 gespeicherten DS in der Exceltabelle
If rg2.Font.ColorIndex = 5 Then     'blaue Schrift
MsgBox "OK"
s1 = rg2.Value
'Suchstring erstellen
s2 = s1
'Suchen in de Accesstabelle
Rs.Find s2
If (Rs.BOF Or Rs.EOF) Then
'DS nicht gefunden
Rs.AddNew
ok = True
Else
''Rs.Edit
''nur in DAO erforderlich, nicht mit ADODB
ok = False
End If
Call writeIntoAccess(Rs, rg2, ok)
Rs.Update
End If
Next rg2
''alle Objekte-Variablen schließen bzw. Zeiger entfernen
Rs.Close
Set Rs = Nothing
Set cmd = Nothing
Cnn.Close
Set Cnn = Nothing
'Farbe Spalte "A" in Exceltabelle auf 'schwarz setzen
rg1.Font.ColorIndex = 0
Set Master = Nothing
Set rg1 = Nothing
GetMoreSpeed False
End Sub


Wie Du sehen kannst, habe ich die Typen für die Variablen s1 und s2 als Integer, da ja bei mir Zahl, deklariert. Leider bleibt das Makro in der Zeile
Rs.Find s2
hängen. Es kommt der Laufzeitfehler 3001: Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereichs oder sind miteinander unvereinbar.
Nur kurz ein paar Angaben zur momentanen Tabelle. Es befinden sich in 433 Zeilen Datensätze mit unterschiedlichen Nummern in Spalte A. Die letzte Nummer in Spalte A ist die Zahl 493. Ich habe nun darunter einen neuen Datensatz angelegt mit der Nummer 494 in Spalte A und habe bei dieser Nummer die Schriftfarbe in blau geändert.
In der Datenbank steht in der letzten Zeile, also in der, in der dieser Datensatz eingefügt werden soll, die Zahl 0. Bei Deiner Beispieldatenbank steht dort ja nichts. Hat das eventuell damit zu tun?
Hoffe, Du kannst mit meinem geschriebenen etwas anfangen. Wenn nicht, einfach nochmal nachfragen und ich versuche den nicht verständlichen Part etwas besser zu beschreiben.
Übrigens verknüpfte Tabellen kommen nicht mit ins Spiel, wenn ich es nach Deinem Beispiel erledigen kann. Das hatte ich nur mal versucht, aber es scheiterte ja daran, dass ich dann in der Datenbank keine Datensätze mehr neu anlegen oder ändern kann, was aber zusätzlich funktionieren (es gibt dafür diverse Formulare in der DB) soll.
Danke nochmal für die Hilfe und Gruß,
Kasimir

Anzeige
Es funktioniert
18.10.2007 12:03:00
Kasimir
Hallo Luschi,
ich habe es. Es funktioniert. Ich hatte die Zeile
s2 = "[case #] = '" & s1 & "'"
in dem Makro gelöscht, weil ich dachte, da es eine Zahl ist, benötige ich dieses Wandeln der Variable nicht. Aber wie ich gemerkt habe, wird das benötigt. Nachdem ich die Zeile in
s2 = "[Startnummer] = " & s1
abgeändert habe, funktioniert es.
Danke Dir für das hervorragende Beispiel, Du hast mir damit enorm geholfen.
Gruß,
Kasimir

AW: Das ist schon mal super, aber....
18.10.2007 12:08:19
Luschi
Hallo Kasimir,
die Suchbedingung ist immer ein String, also muß s2 von Typ 'String' sein und besteht aus den 3 Teilen
- Feldname
- Vergleichsart (gleich, ungleich, kleiner, größer, wie,...)
- Bedingung
für die Bedingung gilt: wenn nach Text gesucht wird, dann muß der Text in Texterkennungszeichen eingebettet sein ('). Daraus folgt:
- Feldname: Brutto
- Bedingung: kleiner gleich
- Wert: 2000
--> s1 von Typ Integer/ besser Long/ bei Zahlen mit Kommastellen: Double
--> s2 vom Typ String
s1=2000
s2 = "Brutto <= " & s1
'------------------------------------------------
- Feldname: Stadt
- Bedingung: gleich
- Wert: klein-Paris
--> s1 von Typ String
--> s2 vom Typ String
s1="klein-Paris"
s2 = "Stadt = '" & s1 & "'"
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Das ist schon mal super, aber....
18.10.2007 12:12:00
Kasimir
Hallo Luschi,
danke Dir für die ausführliche Nacherklärung. Damit kann ich auf jeden Fall etwas anfangen.
Gruß,
Kasimir

AW: Das ist schon mal super, aber....
18.10.2007 15:30:00
Kasimir
Hallo Luschi,
ich bin's nochmal mit einer Frage. Ich hänge im Moment etwas an der Importfunktion. Ich habe das gesamte Modul kopiert und in ein neues Modul eingefügt. Ich habe die MAkronamen abgeändert, damit es da nicht zu einem Konflikt kommt. Außerdem habe ich ein weiteres Tabellenblatt eingefügt das den Namen "Vereine" trägt. Dann habe ich in den neuen Importmakro den Blattnamen der Exceldatei und den Tabellenname der Access-Tabelle in den Namen "Vereine" geändert (Blattname und Tabellenname lauten so). Wenn ich nun das Importmakro ausführe ließt er mir aber die Daten aus der Accesstabelle "Teilnehmer" ein, obwohl das eigentlich die Aufgabe des alten Makros ist.
Muß ich da irgend etwas beachten?
Ich hoffe, Du hast nochmal die Muße mir zu helfen.
Schon mal besten Dank,
Kasimir

Anzeige
AW: Das ist schon mal super, aber....
19.10.2007 07:07:47
Luschi
Hallo Kasimir,
ohne Quelltext kann man da keine sichere Aussage machen. Poste doch man den Vba-Code.
Gruß von Luschi
aus klein-Paris

AW: Das ist schon mal super, aber....
19.10.2007 07:32:00
Kasimir
Hallo Luschi,
danke Dir für Deine Reaktion. Ich habe einfach mal eine Dummydatenbank und die Exceldatei gezippt und hier hochgeladen. Dann kannst Du Dir das mal ansehen. Ich weiß nämlich nicht, ob nur das Makro zum Importieren Dir was bringt, wenn ich es hier aufführe.
https://www.herber.de/bbs/user/46896.zip
Danke Dir nochmal für Deine unermüdliche Hilfe,
Kasimir

Anzeige
AW: Das ist schon mal super, aber....
19.10.2007 09:10:00
Luschi
Hallo Kasimir,
habe den logischen Fehler behoben. Ich habe die 1 Access-Abfrage in 2 aufgesplittet: für jedes Excel-Modul 1 getrennte Abfrage.
So wie Du jetzt das Projekt angelegt hast, sind die Access-Abfragen eigentlich nicht nötig, man könnte auch auf die Access-Tabellen beim Import direkt zugreifen.
Aber vielleicht willst Du in Zukunft nicht immer alle Datensätze importieren, sondern per Definition von Bedingungen nur die Zutreffenden, dann kommen diese Abfragen ( und ADOX) wieder ins Spiel. Deshalb
habe ich an diesem Konzept nichts weiter geändert.
https://www.herber.de/bbs/user/46899.zip
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Das ist schon mal super, aber....
19.10.2007 09:22:30
Kasimir
Hallo Luschi,
danke Dir für Deine Mühe. Ich muss mir jetzt erst mal den Unterschied der beiden Makro ansehen um zu sehen, wo das Problem in meienr Datei lag. Bei Fragen würde ich mich nochmal melden.
Sollte ich alles verstehen möchte ich mich nochmal bei Dir für Deine Hilfe bedanken.
Gruß,
Kasimir

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige