Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1380to1384
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

Excel-Access Import

Excel-Access Import
12.09.2014 12:24:32
Melissa
Hallo zusammen,
ich hatte vor wenigen Wochen schon mal einen Beitrag geschrieben bezüglich einer Webabfrage und eines Imports mit Excel/VBA/Access. Da bräuchte ich beim Import nochmal Hilfe.
Folgendes Szenario:
Ich habe eine Excel-Liste mit folgenden Feldern:
BL_ISBN - BL_Hyperlink - BL_Titel - BL_Autor - BL_Datum - BL_PreisNeu - BL_PreisGebraucht - BL_Link
Beim ersten mal wird die Datei über Externe Daten - Excelimport in Access importiert. Dabei wird das Feld Hyperlink nicht mit importiert (es wird in Access nicht gebraucht, ist aber in der Excelliste wichtig). Beim Import gibt man an einen neuen PS von Access hinzuzufügen (dieser wird dann nachher von ID in BL_ID umbenannt). Der Import wird übrigens gespeichert.
Anschließend hat man die fertige Tabelle in Access, soweit ist auch alles gut.
Jetzt soll es ein Formular geben mit einem Button. Wenn man auf den Button klickt, soll der gespeicherte Excelimport von vorher wiederholt werden (sprich wenn man in der Excelliste einen Datensatz hinzugefügt hat, soll dieser in Access importiert werden)
Franz aus dem Forum hier hatte mir da schon einen Teil für den Import geschrieben:
Private Sub btn_Import_Click()
If MsgBox("Daten für die Tabelle ""Buchliste"" jetzt importieren?", vbQuestion + vbOKCancel, _
"Daten-Import") = vbOK Then
Application.DoCmd.RunSavedImportExport "Buchverwaltung2014"
Application.CurrentDb.TableDefs("tbl_Buchliste").Fields("BL_Link").OrdinalPosition = 9
'Application.DoCmd.OpenForm FormName:="Buchliste_Formular", view:=acNormal
End If
End Sub

Allerdings werden hier immer wieder alle Daten neu importiert und die ID wird nicht erkannt, sodass kein Import zustande kommt. :/
Könnte mir vielleicht jemand diesen Import so umschreiben, dass:
1. Nur neue Datensätze die in der Excelliste hinzugefügt wurden, importiert werden
2. Das die ID ausgelesen wird und es danach weitergeht (also Skript erkennt ID ist bei 8 und zählt dann automatisch hoch und fügt NUR den neuen Datensatz ein)
3. Fehlermeldung einbauen, falls etwas nicht geklappt hat
Um eine Lösung wäre ich super dankbar.
Gruß
Melissa

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel-Access Import
16.09.2014 16:05:57
fcs
Hallo Melissa,
wahrscheinlich muss man hier 2-stufig arbeiten:
1. per Import werden alle Daten in neue Tabelle geladen
2. Per Anfügeabfrage werden dann die neueren Datensätze aus Excel an die vorhandene Tabelle in ACCESS angefügt.
Ich muss allerding noch prüfen, ob das über die ID (die ja von Access automatisch verwaltet wird funktioniert oder ob noch irgendendwie eine Datum (+Uhrzeit?) in Excel mitverwaltte werden muss, damit man neuere Datensätze eindeutig identifizieren kann.
Sobald das Anhängen der neuen Daten komplett ist kann man die Importierte Tabelle wieder löschen.
Gruß
Franz

Anzeige
AW: Excel-Access Import
18.09.2014 09:23:42
Melissa
Guten Morgen,
Oke... Ja das einzige was ich bisher gefunden habe ist, dass man mit VBA auch Tabellen kopieren kann, sowie Beziehungen löschen und wieder neu setzen. Vielleicht könnte man es auch so machen:
Man hat die Haupttabellen die miteinander verknüpft sind und eine Temp-Tabelle. Der Import erfolgt in die Temp-Tabelle (komplett, also nicht nur die neuen Datensätze). Anschließend werden die Daten von der Temp-Tabelle in die Grundtabelle kopiert. Das ist zwar total umständlich, aber wäre zumindest eine Möglichkeit...
Gruß
Melissa

AW: Excel-Access Import
18.09.2014 10:22:09
Melissa
Hallo nochmal,
Habe es jetzt so gelöst:
Habe die Tabelle: tbl_Buchliste und die Tabelle tbl_BuchlisteTMP. In die TMP Tabelle wird das Excelfile importiert (komplett). Dann werden die Daten aus der TMP Tabelle in die anderen Tabelle kopiert.
Ist zwar wie gesagt etwas umständlicher, aber immerhin eine Lösung des Problems. Als Code hab ich folgendes:
Private Sub btn_Copy_Click()
CurrentDb.Execute "INSERT INTO tbl_Buchliste(BL_ID, BL_ISBN, BL_Titel, BL_Autor, BL_Datum)  _
SELECT ID, BL_ISBN, BL_Titel, BL_Autor, BL_Datum FROM tbl_BuchlisteTMP;"
End Sub

Private Sub btn_Import_Click()
If MsgBox("Daten für die Tabelle ""Buchliste"" jetzt importieren?", vbQuestion + vbOKCancel, _
"Daten-Import") = vbOK Then
Application.DoCmd.RunSavedImportExport ("Test_Import")
End If
End Sub

Jetzt bräuchte ich da nur noch eine Fehlerbehandlung drin. Also quasi ne Messagebox, wenn der Import geklappt oder nicht. Und eine Fehlerbehandlung, wenn die Tabelle kopiert wurde oder nicht.
Wenn du mir dabei noch helfen könntest wäre das klasse. :D
Gruß
Melissa

Anzeige
AW: Excel-Access Import
18.09.2014 14:15:30
fcs
Hallo Melissa,
das was du umgesetzt hast entspricht etwa der von mir vorgeschlagenen 2-stufigen Vorgehensweise beim Import der Daten.
Weiter automatisieren könnte man nur, wenn man Kriterien vorgeben könnte, welche Datensätze aus kompletten tmp-Liste jeweils in die Hauptliste kopiert werden sollen oder welche Datensätze in der tmp-Liste gelöscht werden sollen, bevor man das Kopieren ausführt.
Bezüglich Fehlermeldungen kann ich im Moment nur mal eine allgemeine Fehlerprüfung vorschlagen. Dadurch laufen die Makros zumindest durch ohne in den Debug-Modus zu fallen.
Eigentlich sollte Access ähnlich wie bei manueller Ausführung so eine Art Statusmeldung anzeigen, wenn beim Import etwas schief gegangen ist. Ich weiss aber nicht ob dem bei der Ausführung per Makro auch so ist.
Gruß
Franz
Private Sub btn_Copy_Click()
On Error GoTo Fehler
CurrentDb.Execute "INSERT INTO tbl_Buchliste(BL_ID, BL_ISBN, BL_Titel, BL_Autor, BL_Datum)" _
& "SELECT ID, BL_ISBN, BL_Titel, BL_Autor, BL_Datum FROM tbl_BuchlisteTMP;"
Fehler:
With Err
Select Case .Number
Case 0
MsgBox "Daten ohne Fehler nach ""tbl_Buchliste"" kopiert", _
vbOKOnly, "Neue Datensätze kopieren"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbCritical + vbOKOnly, "Neue Datensätze kopieren"
End Select
End With
End Sub
Private Sub btn_Import_Click()
On Error GoTo Fehler
If MsgBox("Daten für die Tabelle ""Buchliste"" jetzt importieren?", _
vbQuestion + vbOKCancel, "Daten-Import") = vbOK Then
Application.DoCmd.RunSavedImportExport ("Test_Import")
End If
Fehler:
With Err
Select Case .Number
Case 0
MsgBox "Daten ohne Fehler nach ""tbl_BuchlisteTMP"" importiert", _
vbOKOnly, "Daten-Import"
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbCritical + vbOKOnly, "Daten-Import"
End Select
End With
End Sub

Anzeige
AW: Excel-Access Import
18.09.2014 15:16:17
Melissa
Hallo Franz,
super, dann lag meine Idee ja doch gar nicht so weit weg von dem was du auch geschrieben hattest.
Ich hab es jetzt nochmal so geändert, dass beim Insert erst geprüft wird, welche Daten schon vorhanden sind und diese dann nicht noch mal mit übernommen werden, sprich es werden nur die neuen Datensätze übernommen. Ich weiß zwar nicht ob es wirklich klappt, aber so sähe mein Code aus:
(Habe jetzt auf die Trennzeichen und Umbrüche verzichtet. Das ich das nachher im VBA Editor noch ändern muss, weiß ich)
CurrentDb.Execute "INSERT INTO tbl_Buchliste (BL_ID, BL_ISBN, BL_Titel, BL_Autor, BL_Datum)
SELECT ID, BL_ISBN, BL_Titel, BL_Autor, BL_Datum
FROM tbl_BuchlisteTMP
WHERE NOT EXISTS (SELECT BL_ID, BL_ISBN, BL_Titel, BL_Autor, BL_Datum
FROM tbl_Buchliste
WHERE tbl_Buchliste.BL_ID = tbl_BuchlisteTMP.ID
AND tbl_Buchliste.BL_ISBN = tbl_BuchlisteTMP.BL_ISBN
AND tbl_Buchliste.BL_Titel = tbl_BuchlisteTMP.BL_Titel
AND tbl_Buchliste.BL_Autor = tbl_BuchlisteTMP.BL_Autor
AND tbl_Buchliste.BL_Datum = tbl_BuchlisteTMP.BL_Datum)"
Wenn man jetzt allerdings einen Datensatz in dem Exceldokument löscht und dann wieder importiert, werden die Daten natürlich nicht übernommen, aber dafür wollte ich mir dann noch eine Updateroutine schreiben.
Es erscheint mir zwar auf den ersten Blick eine etwas umständlichere Methode, aber wenigstens komm ich so zu meinem gewünschten Ziel.
Ich weiß nicht inwiefern du dich mit dem Code auskennst, aber wenn der den ich oben noch geschrieben habe, soweit richtig ist, dann füge ich deinen und meinen zusammen und dann bin ich erstmal wieder zufrieden :D
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige