Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1764to1768
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

Probleme Zugriff Excel --> AccessDB

Probleme Zugriff Excel --> AccessDB
14.06.2020 12:10:59
Andreas
Hallo,
ich habe eine Excel Datei, mit der ich via Makros Datensätze nach Access in bestimmte Tabellen schieben will.-
Die Datei liegt da https://www.herber.de/bbs/user/138275.xlsm und der entsprechende Thread dazu ist dieser https://www.herber.de/forum/messages/1765501.html
Kurz beschrieben, passiert aktuell beim ausführen des Makro AnfuegenQuartette
Sub AnfuegenQuartette()
Dim db As DAO.Database
Dim sSQL As String
Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb" _
)
sSQL = "INSERT INTO tblQuartette (QuartettID, SpielID_F, QuartettKz, QuartettBezeichnung)" &  _
_
" SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _
" [excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & ThisWorkbook.FullName & "].[ _
tblQuartette$]"
db.Execute sSQL, dbFailOnError
MsgBox "Es wurden " & db.RecordsAffected & " Datensätze angefügt."
db.Close
Set db = Nothing
End Sub
(steht exemplarisch auch für die 2 anderen Makros AnfuegenQKarten und AnfuegenKartenMerkmale) folgender Fehler:
Dabei trat folgender Fehler auf.
Laufzeitfehler '3061':
4 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.
Der Debug springt dann in im Makro in diese gelb markierte Zeile
db.Execute sSQL, dbFailOnError
Auch das anpassen der Zeile " SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _ in Spalte1, Spalte2 usw. verursacht den gleichen Fehler. Da es von 4 Parameter spricht, habe ich dann die Zeile
Code: [Auswählen]
" SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _
Für die Spalten habe ich genau den Namen definiert, welche ich auch in den Spaltenüberschriften (aus Zeile1) nutze.
Code: [Auswählen]
" SELECT QuartettID, QuartettKz, SpielID_F, QuartettBezeichnung FROM" & _
Beim erneuten ausführen kommt dann
Laufzeitfehler '3071':
Dieser Ausdruck wurde falsch eingegeben, oder er ist zu komplex, um ausgewertet zu werden. Beispielsweise kann ein numerischer Ausdruck zu viele komplizierte Elemente enthalten. Vereinfachen sie den Ausdruck, indem sie Teile des Ausdrucks Variablen zuweisen.
Der Debug springt dann auch hier im Makro in diese gelb markierte Zeile
db.Execute sSQL, dbFailOnError
Der connect zur DB scheint ja zu klappen, aber ich weiß jetzt noch nicht mal was der eigentliche Fehler ist, die Bezeichnung der Spalten?
Wer hat hier Erfahrung, welchem Fehler ich da unterliege? Ich habe wirklich nur rudimentäres Wissen was VBA angeht und komme da leider nicht weiter. Um den Nutzen bzw. Notwendigkeit dieser Makro zu beziffern. Ich werde damit ca. 95000 Einzelkarten nach Access überführen, welch eich ansosnten in extremer Klickarbeit in Access im Userinterface durchführen müsste.
Danke für eure Hilfe und Gruß
Andreas

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

Betreff
Datum
Anwender
Anzeige
AW: Probleme Zugriff Excel --> AccessDB
15.06.2020 12:52:41
fcs
Hallo Andreas,
ich hab mal versucht dein Makro zu testen, indem die Datei direkt in Access geöffnet wird.
Dann scheint es zu funktionieren.
Zuätzlich hab ich eine Fehlerbehandlung eingebaut, so dass die Access-Datei dann kontrolliert beendet wird.
Was mir beim Testen aufgefallen ist:
Falls eine der beiden ID ein Index-Wert ist, der nur einmal vorkommen darf, dann funktioniert das Makro nur wenn jeweils Datensätze mit neuer ID der Tabelle hinzugefügt werden.
Für das modifizierte Makro müssen auch keine Verweise (auf Microsoft DAO bzw. Microsoft Access) gesetzt werden, da die Objekte allgemein gesetzt sind und die Variablen durch nummerische Werte ersetzt sind.
LG
Franz
Sub AnfuegenQuartette()
Dim appACC As Object
Dim db As Object
Dim sSQL As String
Dim strDB_Datei As String
On Error GoTo Fehler
strDB_Datei = "C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB.accdb"
'    strDB_Datei = "C:\Users\Public\Test\QuartettDB.accdb"
Set appACC = VBA.CreateObject("Access.Application")
appACC.Visible = True 'kann auf False gesetzt werden wenn alles funktioniert
appACC.OpenCurrentDatabase strDB_Datei
Set db = appACC.CurrentDb
sSQL = "INSERT INTO tblQuartette (QuartettID, SpielID_F, QuartettKz, QuartettBezeichnung)" & _
_
" SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _
" [excel 12.0 xml;hdr=yes;imex=1;DATABASE=" & ThisWorkbook.FullName & "].[ _
tblQuartette$]"
db.Execute sSQL, 128 ' 128 = dbFailOnError (aus DAO)
MsgBox "Es wurden " & db.RecordsAffected & " Datensätze angefügt."
db.Close
Set db = Nothing
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbOKOnly, "Makro: AnfuegenQuartette"
If Not db Is Nothing Then db.Close
End Select
End With
End Sub

Anzeige
AW: Probleme Zugriff Excel --> AccessDB - Nachtrag
15.06.2020 12:57:39
fcs
Hallo Andreas,
der Makrocode wurde in einigen Zeilen "unglücklich" umgebrochen.
Deshalb hier nochmals das Makro als Text-Datei.
https://www.herber.de/bbs/user/138311.txt
LG
Franz
AW: Probleme Zugriff Excel --> AccessDB
15.06.2020 17:08:09
Andreas
Hallo Franz,
danke für die Mühe. Ich habe das Makro im Standardmodul hinterlegt. Ich musste ja sonst keine Anpassungen vornehmen. Ich habe es dann aber aus Excel heraus gestartet, dann kam die Fehlermeldung wie gehabt.
Laufzeitfehler '3061':
4 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.
Heute morgen habe ich auch noch mit meinem AK gesprochen, der Programmierer ist und er hat mich gebeten die Zeile
" SELECT SpalteA, SpalteB, SpalteC, SpalteD FROM" & _
mit
" SELECT * FROM" & _
zu ersetzen und zu testen. Und siehe da, ratzfatz waren die Daten in den DB-Tabellen drin. Zuerst dachte ich mit * legt das Makro auch viele neue "Felder" in der DB an (Spalten in Excel gehen ja generisch erst mal bis ZZ). Aber weit gefehlt, er legt genau nur die Daten aus den 4 Spalten an. Im Gegensatz zum copy Daten Exceltabelle & paste in Tabelle Access-DB Verfahren muss man das Autowertfeld befüllen, sonst erzeugt Access eine Importfehler in der DB, auch wenn die Datzensätze korrekt anlegt werden. Dies ist aber ein eher zu verkraftender "Mehraufwand", der mich überhaupt nicht die Bohne stört. Wenn jetzt die Community nicht irgendein Argument liefert, dass diese Vorgehensweise als absolutes NoGo bezeichnet, dann würde ich das Problem für mich als gelöst markieren. Siehst du das z.B. anders?
Gruß Andreas
Anzeige
AW: Probleme Zugriff Excel --> AccessDB
15.06.2020 21:36:37
fcs
Hallo Andreas,
ich habe die Dateien in Excel und Access unter Office 365 erstellt und das Makro in einem allgemeinen Modul der Exceldatei angelegt.
An der SQL-Anweisung hatte ich nichts geändert. Ist auch nicht so ganz meine Welt.
Nachdem ich nur mit dem DAO-Objekt schon das Problem hatte, dass die Datei nicht geöffnet werden konnte wegen eines Problems mit dem Dateiformat, habe ich dann den Umweg über die Access-Anwendung gewählt.
Ansonsten gilt für mich:
Wenn ein Makro funktioniert, dann ist das Hauptziel erreicht.
Um Optimierungen kann man sich dann später kümmern.
LG
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige