Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Zugriff auf access-daten von excel





Frage

Hallo, ich habe folgendes Problem: in Excel habe ich in den Feldern A1..A550 Bestellnummern hinterlegt. Nun möchte ich, dass jede Bestellnummer mit der Access Datenbank artikel.mdb (Tabelle Artikel) verglichen wird. Ist die jeweilige Bestellnummer in der Datenbank gefunden soll der dazugehörige Wert aus Spalte 3, 5, 7 und 8 in der Access-Datenbank an Excel übergeben werden.

Antwort 1 von coros

Hallo micico,

das kann man nur so realisieren, in dem man die Accessdaten in Excel in einem neuen Tabellenblatt einließt und dann diese Daten mit den Bestellnummern über eine Schleife vergleicht. Bei Übereinstimmung werden dann die Daten aus der neuen Hilfstabelle einegfügt und am Ende wird das neue Hilfsblatt wieder gelöscht.

Das Importieren der Accessdaten, das über die Symbolleisteneinträge "Daten => externe Daten importieren" geschehene muss, kannst Du über den Makrorekorder aufnehmen. Wenn Du das erledigt hast, siehst Du auch, in welchen Spalten die für Dich relevanten Daten stehen. Dann muss nur noch eine Schleife zum Prüfen der Bestellnummern realisert werden, die dann die Daten kopiert.

Leider ist es müsig, Dir hier eine Komplettlösung zu präsentieren, wenn man keinerlei Angaben zur Datenbank hat.

Wie man mit dem Makrorekorder umgeht findest Du anhand eines Beispiels auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 7 . Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

MfG,
Oliver
Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du ein
Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.

Antwort 2 von Ahnan

Hallo,

zunächst der Hinweis: Nicht zwei Threads mit dem gleichen Thema eröffnen !!!
Zur Aufgabe:
Hatte mal das gleiche Problem und habe es zwar nicht besonders elegant, aber funktionsfähig gelöst:

Option Explicit

Sub Datensätze_auslesen()
Dim ADOC As New ADODB.Connection
Dim DBS As New ADODB.Recordset
Dim Tabelle1 As Worksheet
Dim s As String
Dim Datei As String
Dim i As Long

Rem Den Pfad habe ich aus deinem zweiten Thread !
Datei = "C:\datenbank\Artikel.mdb"
ADOC.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Datei & ";"
Set Tabelle1 = Sheets("Tabelle1")
Rem Artikel ist der Tabellenname deiner Access-Artikel.mdb !
DBS.Open "Artikel", ADOC, adOpenKeyset, _
adLockOptimistic
On Error GoTo Fehler
For i = 1 To 550
If Tabelle1.Cells(i, 2).Value = "" Then
s = Tabelle1.Cells(i, 1).Value
Rem BestellNr ist der Spaltenname, in der die Bestellnummern gesucht werden sollen !
s = "BestellNr = ´" & s & "´"
DBS.Find (s)
With Tabelle1
Rem DBS!RabattGr ist eine der Spalten, welche in Excel in Spalte B eingelesen werden soll !
.Cells(i, 2).Value = DBS!RabattGr
Rem DBS!Brutto ist eine weitere Spalte u. wird in Excel in Spalte C eingelesen !
.Cells(i, 3).Value = DBS!Brutto
Rem DBS!EKMulti ist eine weitere Spalte u. wird in Excel in Spalte D eingelesen !
.Cells(i, 4).Value = DBS!EKMulti
Rem DBS!Netto ist eine weitere Spalte u. wird in Excel in Spalte E eingelesen !
.Cells(i, 5).Value = DBS!Netto
End With
End If
Next i
DBS.Close
ADOC.Close
Exit Sub

Fehler:
Tabelle1.Cells(i, 2).Value = "nicht gefunden !"
Tabelle1.Cells(i, 3).Value = "nicht gefunden !"
Tabelle1.Cells(i, 4).Value = "nicht gefunden !"
Tabelle1.Cells(i, 5).Value = "nicht gefunden !"
Call Datensätze_auslesen
DBS.Close
ADOC.Close
End Sub


Pfad, Tabellenname, Spaltennamen der Accessdatei müssen genau übereinstimmen, sonst geht "nix" !
Ausserdem musst du noch in VBA den Verweis setzen:

Microsoft ActiveX Data Objects 2.1 Library

Oder höhere Version, z.B. 2.5 (einfach die höchste nehmen !)

Soll die Aktualisierung bei jedem Dateistart der Exceldatei erfolgen, dann musst du den Makroaufruf in das Open-Ereignis der Arbeitsmappe einfügen:

Option Explicit

Private Sub Workbook_Open()
REM Vor dem Makroaufruf, muss noch der Datenbereich in Excel gelöscht werden, damit Aktualisierung wirksam wird:
Sheets("Tabelle1").Range("B2:E550").Value = ""
Call Datensätze_auslesen
End Sub


Bei Fragen melden

Grüsse

Antwort 3 von micico

Hallo und vielen Dank für die Lösungsvorschläge. Leider wusste ich mir keinen anderen Ausweg als einen weiteren Thread zu erstellen, da ich keine Antworten mehr erhalten habe. Leider hab ich im Moment keine Zeit aber icvh werde das heute Abend mal ausprobieren. Vielen Dank an ALLE, die mir bislang lösungsvorschläge gesendet haben

Gruß Michael

Antwort 4 von micico

Hallo Ahnan,
sooooo, jetzt hab´ich es probiert. Was ich nicht erwähnt habe ist, dass ich die zu ermittelnden Bestellnummern in "Tabelle 25" habe und das meine VBA Kenntnisse ziemlich mies sind.
Ich habe aus Excel Extras->Makro->Visual Basic-Editor aufgerufen. Dann habe ich links in dem Fenster Projekt - VBAProjekt die Betreffende Tabelle 25 doppelt angeklickt und in dem geöffneten Fenster die Programmierung eingesetzt.
Frage 1:
Welche Parameter muss ich nun auf die Tabelle 25 ändern?
Frage 2:
Wie wird das Makro ausgeführt?
Frage 3:
Was passiert, wenn ich vor der Tabelle 25 Tabellen einfüge oder lösche?
Frage 4:
Wo schreibe ich die Aktualisierungsroutine hin???

Gruß Michael

Antwort 5 von micico

OK, Ich habe alles von Tabelle1 auf Tabelle 25 geändert. Beim Ausführen des Makros erhalte ich bis zur 128. Bestellnummer in jeder Spalte nicht gefunden! und dann erscheint die Fehlermeldung " Systemfehler &H80004005 (-2147467259). Unbekannter Fehler"

Antwort 6 von Ahnan

Hallo,

Tabelle25 muss nur hier rein:

Set Tabelle1 = Sheets("Tabelle25")

Den Rest nicht ändern.

Das Makro wird so ausgeführt, wie du es "ansprichst". Du möchtest es ja beim Start deiner Exceldatei starten lassen, wegen der Aktualisierung. Kopiere das Makro in ein Modul. Gehe auf Einfügen u. dann auf Modul u. dann kopierst du das Makro (mit der Veränderung Tabelle25, wie oben) hinein. Somit steht es nun "überall" zur Verfügung.
Anschliessend:

"Ich habe aus Excel Extras->Makro->Visual Basic-Editor aufgerufen. Dann habe ich links in dem Fenster Projekt - VBAProjekt die Betreffende Tabelle 25 doppelt angeklickt und in dem geöffneten Fenster die Programmierung eingesetzt."


Nur musst du nicht das VBA-Projekt Tabelle25 auswählen, sondern "DieseArbeitsmappe" ! Dort fügst du dies ein:

Private Sub Workbook_Open()
REM Vor dem Makroaufruf, muss noch der Datenbereich in Excel gelöscht werden, damit Aktualisierung wirksam wird:
Sheets("Tabelle25").Range("B2:E550").Value = ""
Call Datensätze_auslesen
End Sub

So, wenn nun dein Pfad (Access-Datei), der Name der Access-Tabelle u. die Spaltenbezeichnungen innerhalb der Access-Tabelle stimmen, sollte es eigentlich laufen. Die Bestellnummern müssen natürlich in deiner Exceldatei (Tabelle25, Spalte A) genau aufgebaut sein, wie die Bestellnummern in der Access-Tabelle. Keine Leerzeichen z.B.

Falls es immer noch nicht gehen sollte, kannst du mir die Access-datei per Mail schicken, dann mache ich dir die Abfrage. Muss ja nicht die Originale sein. Eine abgespekte Version, vom Aufbau ähnlich würde genügen. Und noch die "Tabelle25" deiner Exceldatei.
An:
held1233@aol.com

Grüsse

Antwort 7 von micico

Hallo Ahnan,
ich habe alles so gemacht wie Du es beschrieben hast. Nach dem Start der Excel Datei erscheint die Fehlermeldung "Laufzeitfehler ´-2147467259 (80004005)´: Unbekannter Fehler". Wenn ich nun Debuggen aktiviere wird die Zeile ADOC.Open _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & Datei & ";" gelb markiert.
Die Felder B1..E64 sind mit "nicht gefunden ! " gefüllt.

Gruß Michael

Antwort 8 von micico

Hallo Ahnan,
ich habe versucht die Access Datenbank zu verkleinern, leider ohne Erfolg. Ich habe fast alle Artikel aus der Kopie der Datenbank herausgelöscht, aber trotzdem wurde diese nicht kleiner. Si ist nach wie vor ca. 540 MB gross....

Antwort 9 von Ahnan

Hallo Michael,

den Verweis in VBA hast du gesetzt ?

Microsoft ActiveX Data Objects 2.1 Library

Oder höhere Version, z.B. 2.5 (einfach die höchste nehmen !)


Dazu gehst in den VBA-Editor und dort EXTRAS, dann Verweise u. suchst den oben beschriebenen heraus u. einen Haken rein.

Wenn das auch nicht klappt, dann schick mir eine Blankomail. Ich sende dir dann ein Beispiel.

Grüsse

Antwort 10 von micico

Yip hab ich gemacht.... funktioniert aber nicht. Ich versuche mal, Dir die Excel- und Access-Datei zu senden. Habe eine Blanko-Access Datenbank gefunden....

Gruß und nochmal vielen Dank für Deine Bemühungen...

Michael (micico@web.de)

Antwort 11 von Risatara2

Ähmmm... was spricht gegen eine Hilfstabelle, in die die Daten aus Access eingelesen werden können (können sogar in regelmäßigen Abständen aktualisiert werden) und die man dann über einen SVerweis abfragen kann?

Antwort 12 von micico

Hi, so weit war ich schon..... aber 500.000 Artikel gehen nicht in eine Excel-Datei...

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: