Hallo Mitglieder des Forums,
Ich benutze Access 2013 und excel 2003.
Mit dem Befehl transferspeadsheet hole ich Daten von Excel nach Access. Der Transfer-Befehl erzeugt eine
verlinkte Tabelle, auf die ich dann mit VBA mit einem recordset zugreife. Das funktioniert einmal.
Aber bei jeder Benutzung des Transfer-Befehls wird eine neue verlinkte Tabelle erstellt mit gleichem Namen und einer angehägten Nummer (kunex1,kunex2 usw.). Das recorset kann aber nur auf die erste verlinkte Tabelle zugreifen.
Löschen kann ich die verlinkten Tabellen aus Access auch nicht. Wenn ich statt des aclink im transfer-Befehl acimport verwende, erhalte ich die Fehlermeldung " isam nicht gefunden". Wie kann ich nun den Code benutzen? Ich wäre für eine Hilfe sehr dankbar!
Hier den Codeausschnitt:
DoCmd.TransferSpreadsheet acLink, xlsx, "kunex", AA, True, ""
Set zts = db.OpenRecordset("kunex")
Set kun = db.OpenRecordset("Kundenbestellungen", DB_OPEN_DYNASET)
kun.AddNew
kun("IDwert") = zts("IDwert")
.....
kun.update
Zitat von: accessfan1 am Dezember 15, 2017, 09:27:21
Löschen kann ich die verlinkten Tabellen aus Access auch nicht.
Warum nicht, damit wären doch alle Probleme gelöst.
Das Löschen habe ich nach allen Regeln versucht. Aus der Access-Liste verschwinden aber die verlinkten
Files nicht und das Problem ist so nicht gelöst.
Oder gibt es eine Möglichkeit des totalen Löschens?
Mein versuchter Löschcode:
Sub kunexweg()
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
For Each tdf In db.TableDefs
If Left(tdf.Name, 5) = "kunex" Then
MsgBox tdf.Name
On Error Resume Next
DoCmd.RunCommand acCmdConvertLinkedTableToLocal
On Error Resume Next
DoCmd.DeleteObject tdf.Name
MsgBox tdf.Name
End If
Next tdf
db.TableDefs.Refresh
db.Close
End Sub
Das Msgbox zeigt, daß die Files noch vorhanden sind und im Access-Tabellen-Feld stehen sie ja auch noch.
ZitatDas funktioniert einmal.
Das reicht ja auch. Einmal verlinkt ist verlinkt.
Wenn Du immer neu verlinken willst pro Aufruf des Recordsets, muss die vorherige Verknüpfung gelöscht werden. Wenn die Verknüpfung beibehalten werden kann und soll, musst Du die Verknüpfungsanweisung aus diesem Code herausnehmen und an anderer Stelle einmalig vornehmen.
ZitatAus der Access-Liste verschwinden aber die verlinkten Files nicht
Manchmal hinkt die Anzeige oder ein vorhandener Speicher der eigentlichen Methode hinterher. Schiebe nach dem Löschen ein:
Application.RefreshDatabaseWindow
Alternativ kann man die Exceltabelle per Abfrage einbinden und spart sich da das permanente Verlinken und Entlinken:
SELECT T.* FROM [excel 12.0 xml;hdr=yes;imex=1;DATABASE=D:\eine\Exeldatei.xlsx].[Tabelle1$] AS T
Lieber Access-Meister,
ich muß nacheinander mehrere Excelfiles laden.
"Einmal verlinkt ist verlinkt."
Alle durch den Transfer-Befehl entstehenden Files sind im Access-Tabellenfeld als verlinkt gekennzeichnet. Aber die Kontrolle, ob Tabellen verlinkt sind zeigt an, daß keine Files verlinkt sind und das Löschen klappt eben auch nicht. Ich habe gelesen, daß man von Access aus die Excel-Daten nicht bearbeiten kann, weil Microsoft die Möglichkeit gesperrt hat. Aber das Löschen der im Access-System angezeigten Tabellen würde mein Problem tatsächlich lösen. Aber das Löschen geht einfach nicht (ohne Fehlermeldung!). Muß ich nun auf den Transfer-Befehl einfach verzichten??
ZitatAber die Kontrolle, ob Tabellen verlinkt sind zeigt an, daß keine Files verlinkt sind und das Löschen klappt eben auch nicht.
Welch ein Durcheinander.
On Error Resume Next
DoCmd.RunCommand acCmdConvertLinkedTableToLocal
On Error Resume Next
Was macht diese Passage genau? Eine Beschreibung zu der Accesskonstante finde ich nicht.
Ansonsten: Eine Kontolle auf Verlinkung sehe ich nicht, nur einen Test, ob es eine Tabelle mit einem bestimmten Präfix gibt. Das kann dann eine interne oder eine verlinkte Tabelle sein.
Wenn ein Löschen oder etwas anderes nicht funktioniert, sollte man Fehler nicht ignorieren (On Error Resume Next), sondern vorhandene Fehler analysieren und beseitigen.
Wenn die Verknüpfung nicht aktiv von einem anderen Objekt gerade genutzt wird, sollte ein einfaches DoCmd.DeleteObject acTable, "NameDerVerknuepftenTabelle"
zum Ziel führen.
PS: Lesen, Editieren und Anfügen von Daten-Tabellen in Excel-Blättern geht auch mittels Recordset - nur das Löschen von Datensätzen ist nicht statthaft.
On Error Resume Next
DoCmd.RunCommand acCmdConvertLinkedTableToLocal
On Error Resume Next
Diese Passage habe ich nicht ( immer ) dabei gehabt.
Das war nur ein Versuch, die Links in totale Files zu
wandeln.
Jedenfalls kann ich die erstellten kunex-Files nicht löschen.
AberSo klappt es jetzt!:
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
For Each tdf In db.TableDefs
If Left(tdf.Name, 5) = "kunex" Then
MsgBox tdf.Name
DoCmd.DeleteObject actable tdf.Name
End If
Next tdf
db.TableDefs.Refresh
db.Close
End Sub
Vielen Dank!