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

VBA Kompilierungsfehler

VBA Kompilierungsfehler
21.06.2020 18:09:37
Andreas
Hallo,
ich habe 3 kleiner Makros, wovon ich eines erweitern musste, da aber anscheinend einen Fehler produziert habe, den ich einfach nicht finde. Die Fehlermeldung ist Laufzeitfehler 3075:
Syntaxfehler in Zeichenfolge in Abfrageausdruck ")'.
Dazu wird natürlich die erweiterte Zeile gelb markiert.
db.Execute "INSERT INTO tblQuKarten (QuartettID_F,KartenNr,Kartenbezeichnung,ModellTyp,Druckdatum,BildFlaggen) Values ('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "'," & ws.Cells(i, 5) & "'," & ws.Cells(i, 6) & "'," & ws.Cells(i, 7) & "')"
Ich dachte ich habe es korrekt erweitert. Weiterhin die FRage, wie man so ein Ellenlange Zeile "bricht". Ich dachte auch hier
& _ wäre richtig, und zwar vor dem Values, also
BildFlaggen)" &_
"Values
aber auch das passt nicht. Kann mir jemand helfen?
mfG
Andreas

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Kompilierungsfehler
21.06.2020 18:38:05
EtoPHG
Hallo Andreas,
Warum nicht eine Variable einführen uns schön eines nach dem anderen?
Das macht die Sache übersichtlicher.
    Dim sqlText As String
sqlText = "INSERT INTO tblQuKarten " & _
"(QuartettID_F," & _
" KartenNr," & _
" Kartenbezeichnung," & _
" ModellTyp," & _
" Druckdatum," & _
" BildFlaggen)" & _
" Values ('" & ws.Cells(i, 2) & "', " & _
"'" & ws.Cells(i, 3) & "', " & _
"'" & ws.Cells(i, 4) & "', " & _
"'" & ws.Cells(i, 5) & "', " & _
"'" & ws.Cells(i, 6) & "', " & _
"'" & ws.Cells(i, 7) & "')"
db.Execute sqlText
Gruess Hansueli
Anzeige
AW: VBA Kompilierungsfehler
21.06.2020 18:50:34
Andreas
Hallo Hansueli,
nach weil ich Excel Grundkenntnisse habe und VBA schlicht weg ganz übles Wissen besitze.
Das Ganze sieht ja aktuell so aus:

Sub KartenAnfuegen()
' Verweis auf Microsoft DAO 3.6 Object Library
Dim db As DAO.Database
Dim ws As Worksheet
Dim i As Long
Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB. _
accdb")
Set ws = ActiveWorkbook.Worksheets("tblQuKarten")
' Annahmen:
' 1) Exceltabelle hat Feldnamen
' 2) Spalte A enthält die Schlüsselnummer (Datentyp Zahl)
' 3) Spalte B|C|D|E|F|G enthalten die anzufügenden Daten (Datentyp Text und Zahl)
For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
db.Execute "INSERT INTO tblQuKarten (QuartettID_F,KartenNr,Kartenbezeichnung, _
ModellTyp,Druckdatum,BildFlaggen) Values ('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "'," & ws.Cells(i, 5) & "'," & ws.Cells(i, 6) & "'," & ws.Cells(i, 7) & ")'"
' For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
'         db.Execute "INSERT INTO tblQuKarten (QuartettID_F,KartenNr,Kartenbezeichnung, _
ModellTyp,Druckdatum,BildFlaggen)" &_
'         "Values ('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "' _
," & ws.Cells(i, 5) & "'," & ws.Cells(i, 6) & "'," & ws.Cells(i, 7) & "')"
Next
MsgBox "Es wurden Datensätze angefügt."
db.Close
Set db = Nothing
Set ws = Nothing
End Sub
Sprich deine Lösung kann ich so gar nicht verarbeiten, weil ich eben nicht weiß wie ich sie einbinden sollte :-(.
Setze ich sie so um

Sub Test()
Dim sqlText As String
sqlText = "INSERT INTO tblQuKarten " & _
"(QuartettID_F," & _
" KartenNr," & _
" Kartenbezeichnung," & _
" ModellTyp," & _
" Druckdatum," & _
" BildFlaggen)" & _
" Values ('" & ws.Cells(i, 2) & "', " & _
"'" & ws.Cells(i, 3) & "', " & _
"'" & ws.Cells(i, 4) & "', " & _
"'" & ws.Cells(i, 5) & "', " & _
"'" & ws.Cells(i, 6) & "', " & _
"'" & ws.Cells(i, 7) & "')"
db.Execute sqlText
MsgBox "Es wurden Datensätze angefügt."
db.Close
Set db = Nothing
Set ws = Nothing
End Sub
dann kommt Laufzeitfehler 424, Objekt erforderlich und markiert den ganzen Insert INTO Bereich. Die Fehlermeldung bezieht sich auf was? Sorry, VBA ist leider nicht meine Welt.
Gruß Andreas
Anzeige
AW: VBA Kompilierungsfehler
22.06.2020 08:59:59
Luschi
Hallo Andreas,
wenn Du Dir im Notepad-Editor die Angaben hinter Values so ansiehst:
('" & ws.Cells(i, 2) &
"','" & ws.Cells(i, 3) &
"','" & ws.Cells(i, 4) &
"'," & ws.Cells(i, 5) &
"'," & ws.Cells(i, 6) &
"'," & ws.Cells(i, 7) & ")'"
wirst Du feststellen, daßß am Beginn der Zeilen die Angaben nicht konsistent sind:
mal "','" /was korrekt ist und mal so "',"
Es fehlen also ein paar einfache Hochkommas (').
Ich kann mir allerdings nicht vorstellen, daß Du das Druckduten als Text schreiben willst, denn nichts anderes bedeuten die einfachen Hochkommas in Deiner Code-Kette.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: VBA Kompilierungsfehler
22.06.2020 17:23:20
Andreas
Hi,
ich habe das beim letzten mal nicht gequotet, so kam das wohl zustande. Wenn ich es jetz quote

Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB. _
accdb")
sqlText = "INSERT INTO tblQuKarten " & _
"(QuartettID_F," & _
" KartenNr," & _
" Kartenbezeichnung," & _
" ModellTyp," & _
" Druckdatum," & _
" BildFlaggen)" & _
" Values ('" & ws.Cells(i, 2) & "', " & _
"'" & ws.Cells(i, 3) & "', " & _
"'" & ws.Cells(i, 4) & "', " & _
"'" & ws.Cells(i, 5) & "', " & _
"'" & ws.Cells(i, 6) & "', " & _
"'" & ws.Cells(i, 7) & "')"
db.Execute sqlText
Und ich will nur die Daten aus einer Excel in die Accesstabelle exportieren. Das funktioniert j auch mit meinem Makro. Beispiel:

Sub QuartetteAnfuegen()
' Verweis auf Microsoft DAO 3.6 Object Library
Dim db As DAO.Database
Dim ws As Worksheet
Dim i As Long
Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB. _
accdb")
Set ws = ActiveWorkbook.Worksheets("tblQuartette")
' Annahmen:
' 1) Exceltabelle hat Feldnamen
' 2) Spalte A enthält die Schlüsselnummer (Datentyp Zahl)
' 3) Spalte B|C|D enthalten die anzufügenden Daten (Datentyp Text und Zahl)
For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
db.Execute "INSERT INTO tblQuartette (SpielID_F,QuartettKz,QuartettBezeichnung)  _
Values ('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "')"
Next
MsgBox "Es wurden Datensätze in der Tabelle Quartette angefügt."
db.Close
Set db = Nothing
Set ws = Nothing
End Sub
Nachdem ich jetzt eine Erweiterung machen wollte, bekam ich Syntaxfehler in der INSERT INTO-Anweisung.

Sub KartenAnfuegen()
' Verweis auf Microsoft DAO 3.6 Object Library
Dim db As DAO.Database
Dim ws As Worksheet
Dim i As Long
Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB. _
accdb")
Set ws = ActiveWorkbook.Worksheets("tblQuKarten")
' Annahmen:
' 1) Exceltabelle hat Feldnamen
' 2) Spalte A enthält die Schlüsselnummer (Datentyp Zahl)
' 3) Spalte B|C|D|E|F|G enthalten die anzufügenden Daten (Datentyp Text und Zahl)
For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
db.Execute "INSERT INTO tblQuKarten (QuartettID_F,KartenNr,Kartenbezeichnung, _
ModellTyp,Druckdatum,BildFlaggen) Values ('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "'," & ws.Cells(i, 5) & "'," & ws.Cells(i, 6) & "'," & ws.Cells(i, 7) & ")'"
' For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
'         db.Execute "INSERT INTO tblQuKarten (QuartettID_F,KartenNr,Kartenbezeichnung, _
ModellTyp,Druckdatum,BildFlaggen)" &_
'         "Values ('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "' _
," & ws.Cells(i, 5) & "'," & ws.Cells(i, 6) & "'," & ws.Cells(i, 7) & "')"
Next
MsgBox "Es wurden Datensätze in der Tabelle Karten angefügt."
db.Close
Set db = Nothing
Set ws = Nothing
End Sub
Gruß Andreas
Anzeige
AW: VBA Kompilierungsfehler
22.06.2020 11:08:03
EtoPHG
Hallo Andreas,
Warum versuchst Du Dich bei so minimalem Wissen an VBA? Gewisse Grundkenntnisse kann man sich mit etwas Mühe schon in wenigen Tagen aneignen. Kommt noch dazu, das hier SQL zusammengesetzt wird. Hier empfiehlt es sich den (zusammengesetzten) SQL-Befehl zu isolieren und ggf. auszugeben (z.B. mit Debug.Print sqlText) und ggf. in mit einem DB-Querytool zuerst auszuprobieren, bevor man falsche Befehle via VBA auf die DB loslässt.
Die Dimensionierung der Variablen kommt an den Anfang der Prozedur, dort wo du auch die anderen Variablen deklariert hast.
Die restlichen Codezeilen sollen deine deine Codezeile db.Execute ersetzen. Ich nehme an, du beherrschst wenigstens den VBA-Editor und Copy/Paste/Delete etc...
Gruess Hansueli
Anzeige
AW: VBA Kompilierungsfehler
22.06.2020 17:45:08
Andreas
Hallo Hansueli,
nun ja, ich muss/will rund 100000 Karten mit ihren Werten (im Schnitt 6 pro Karte) in eine DB
bringen, verteilt auf 3 Tabellen (Tabelle für 3000 Spiele, Tabelle für 100000 Einzelkarten und Tabelle für die Werte ca. 600000 Werte. Das kann ich natürlich mit meinen 0 VBA-Kenntnissen "manuell" machen bzw. in die DB reinklopfen, oder aber ich finde ein Makro, dass mir die Arbeit erleichtert. Dann finde ich sogar ein Basismakro und passe es an und es funktioniert sogar.
Warum nehmt ihr beim Hausbau einen Kran, wenn man doch alles mit der Hand erledigen kann? Ja genau, das macht ja der Maurer, weil man selbst nicht kann und hat. Was ist in meinem Fall anders?
Soviel zum Thema, warum ich mir VBA antue obwohl ich es nicht kann.
Nicht vergessen, ich habe ein funktionales Makro, nur die Erweiterung hat mir einen Syntaxfehler geliefert. Dazu habe ich die Frage gestellt, wo der Fehler liegt. Ein neues Makro hat mich dann vor ganz andere Probleme gestellt.
Gruß Andreas
Anzeige
und jetzt? Funktionierts? Informationslos! (owT)
22.06.2020 18:41:29
EtoPHG

AW: und jetzt? Funktionierts? Informationslos! (owT)
22.06.2020 19:06:25
Andreas
Hi,
sorry, nein.

Sub Test()
Dim db As DAO.Database
Dim sqlText As String
Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB. _
accdb")
sqlText = "INSERT INTO tblQuKarten " & _
"(QuartettID_F," & _
" KartenNr," & _
" Kartenbezeichnung," & _
" ModellTyp," & _
" Druckdatum," & _
" BildFlaggen)" & _
" Values ('" & ws.Cells(i, 2) & "', " & _
"'" & ws.Cells(i, 3) & "', " & _
"'" & ws.Cells(i, 4) & "', " & _
"'" & ws.Cells(i, 5) & "', " & _
"'" & ws.Cells(i, 6) & "', " & _
"'" & ws.Cells(i, 7) & "')"
db.Execute sqlText
MsgBox "Es wurden Datensätze angefügt."
db.Close
Set db = Nothing
Set ws = Nothing
End Sub
Es kommt weiterhin Laufzeitfehler 421: Objekt erforderlich
und dabei wird ab sqlText der komplette INSERT INTO Block gelb markiert. Ich weiß beim besten Willen nicht, auf welches Objekt er sich bezieht :-(.
mit freundlichen Grüßen
Andreas
Anzeige
AW: dann muss ich aufgeben...
22.06.2020 21:37:32
EtoPHG
, denn offensichtlich kannst du auch die einfachsten Anweisungen (Code korrigieren, editieren) nicht umsetzen, Andreas.
Gruess Hansueli
AW: dann muss ich aufgeben...
22.06.2020 22:28:10
Andreas
jo, geht i.O.
Gruss Andreas
AW: gelöst (oBdLw)
24.06.2020 18:48:12
Andreas
-
AW: VBA Kompilierungsfehler
21.06.2020 23:11:40
onur
Was ist denn
Values (   
?
Ein neuer Befehl?
AW: Values ist ein Keyword von SQL, onur! (owT)
22.06.2020 10:13:12
SQL,

AW: Values ist ein Keyword von SQL, onur! (owT)
22.06.2020 17:28:22
SQL,
Hi,
da ich der Newbie bin und von VBA keine Ahnung habe, kann ich deine Frage nicht einschätzen ob die ernst gemeint ist. Aber ich sag mal, zumindest funktioniert das Makro mit Value, dann also kein neuer Befehl

Sub KartenMerkmaleAnfuegen()
Dim db As DAO.Database
Dim ws As Worksheet
Dim i As Long
Set db = OpenDatabase("C:\Users\linus\Familie\Quartette\Datenbank\Access-DB\QuartettDB. _
accdb")
Set ws = ActiveWorkbook.Worksheets("tblKartenMerkmale")
For i = 2 To ws.Cells(Cells.Rows.Count, 2).End(xlUp).Row
db.Execute "INSERT INTO tblKartenMerkmale (QuKartenID_F,MerkmalID_F,Eintrag) Values  _
('" & ws.Cells(i, 2) & "','" & ws.Cells(i, 3) & "','" & ws.Cells(i, 4) & "')"
Next
MsgBox "Es wurden Datensätze in der Tabelle Kartenmerkmale angefügt."
db.Close
Set db = Nothing
Set ws = Nothing
End Sub
Gruß Andreas
Anzeige
AW: Values ist ein Keyword von SQL, onur! (owT)
23.06.2020 11:16:34
SQL,
Hallo Andreas,

da ich der Newbie bin und von VBA keine Ahnung habe,
Deshalb verstehe ich nicht, warum es Dir nicht möglich sein kann:
- eine Excel- und Access-Demodatei mit Demodaten vorzubereiten
- und hier bereitzustellen?
fragt sich Luschi
aus klein-Paris
AW: Values ist ein Keyword von SQL, onur! (owT)
23.06.2020 16:29:39
SQL,
Hallo,
das hat ja nichts mit "mir nicht möglich sein" zu tun. Aus deiner 1. Antwort Values neuer Parameter? kann man jetzt nicht wirklich drauß schließen, dass die Dateien gewünscht oder erforderlich sind. Ich dachte, dass wenn ich das ganze Makro hier abbilde reicht. Wenn eine Demo DB erforderlich ist, dann muss ich ein anderes Forum wechseln, weil es hier um Excel und VBA geht. Das Makro funktioniert ja, nur wenn ich es erweitere, dann passt der Syntax nicht, das hat in keiner Weise etwas mit den Felder aus der Access-DB oder dem INSERT an sich zu tun, da die zu befüllenden Felder der Excel und der Accesstabelle zu 100% passen und identisch sind.
Die Excel Datei liegt da https://www.herber.de/bbs/user/138505.xlsm
mfG
Andreas
Anzeige
AW: gelöst (owTudLw)
24.06.2020 18:49:01
Andreas
-
Was sollen diese rechtsextremen Abkzgen! (owT)
26.06.2020 13:53:46
EtoPHG

AW: ......also besser so? Gelöst (owT)
26.06.2020 15:50:26
Andreas
!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige