Discussion:
Datenabfrage Access Tabellen mit Excel plus VBA
(zu alt für eine Antwort)
Robert Jakob
2006-06-28 04:56:03 UTC
Permalink
Guten Morgen,

bisher lese ich Daten von Access mit einem Umweg indem ich von Access aus
eine Datei im Excelformat ausgebe. Der Nachteil dabei ist, ich habe eine
Datei zwischengespeichert, die ich gar nicht brauche.

Nun möchte ich statt dessen gerne mit Excel plus VBA eine direkte
Datenabfrage machen und eine Access-Tabelle, die maximal einen Umfang von
bis zu 500 Datenzeilen mit bis zu 10 Datenspalten hat einfach einlesen.

Meine Wunschvorstelleung wäre, mit Excel plus VBA direkt auf die Access
Tabelle einen Lesezugriff zu machen ohne dort etwas zu verändern und zwar
auch dann wenn die Access-Anwendung gerade läuft oder auch nicht aktiv ist.

Die Accessanwendung läuft meist mit einem kleinen Netzwerk von 3 Rechner
und die Abfrage zur Analyse soll von einem der Drei aus erfolgen.

Meine abschließende Frage, kann man das realisieren ohne die Access
Anwendung zu stören ? und wenn wie könnte es gehen ?

Über hilfreiche Hinweise würde ich mich sehr freuen.

MfG
Robert
Thomas Ramel
2006-06-28 05:15:18 UTC
Permalink
Grüezi Robert

Robert Jakob schrieb am 28.06.2006
Post by Robert Jakob
Nun möchte ich statt dessen gerne mit Excel plus VBA eine direkte
Datenabfrage machen und eine Access-Tabelle, die maximal einen Umfang von
bis zu 500 Datenzeilen mit bis zu 10 Datenspalten hat einfach einlesen.
Meine Wunschvorstelleung wäre, mit Excel plus VBA direkt auf die Access
Tabelle einen Lesezugriff zu machen ohne dort etwas zu verändern und zwar
auch dann wenn die Access-Anwendung gerade läuft oder auch nicht aktiv ist.
Die Accessanwendung läuft meist mit einem kleinen Netzwerk von 3 Rechner
und die Abfrage zur Analyse soll von einem der Drei aus erfolgen.
Meine abschließende Frage, kann man das realisieren ohne die Access
Anwendung zu stören ? und wenn wie könnte es gehen ?
Du könntest die Daten über eine einfache Abfrage aus Excel heraus
importieren.

--> Menü: 'Daten'
--> Externe Daten importieren
--> Neue Abfrage erstellen... (Hierdurch wird MSQuery aufgerufen)
--> Microsoft Access Datenbank
--> [OK]
--> die gewünschte *.mdb selektieren
--> [OK]
--> Tabellen hinzufügen
--> Datenfelder auswählen
--> Durchklicken bis zum Ende

Nun hast Du einen aktualisierbaren Datenimport in Excel, der direkt auf
deine Access-Datenbank zugreift.

Teste wie sich dies verhält wenn die DB durch die User geöffnet ist.


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Robert Jakob
2006-06-28 16:15:56 UTC
Permalink
Post by Thomas Ramel
Grüezi Robert
Robert Jakob schrieb am 28.06.2006
Post by Robert Jakob
Nun möchte ich statt dessen gerne mit Excel plus VBA eine direkte
Datenabfrage machen und eine Access-Tabelle, die maximal einen Umfang von
bis zu 500 Datenzeilen mit bis zu 10 Datenspalten hat einfach einlesen.
Meine Wunschvorstelleung wäre, mit Excel plus VBA direkt auf die Access
Tabelle einen Lesezugriff zu machen ohne dort etwas zu verändern und zwar
auch dann wenn die Access-Anwendung gerade läuft oder auch nicht aktiv ist.
Die Accessanwendung läuft meist mit einem kleinen Netzwerk von 3 Rechner
und die Abfrage zur Analyse soll von einem der Drei aus erfolgen.
Meine abschließende Frage, kann man das realisieren ohne die Access
Anwendung zu stören ? und wenn wie könnte es gehen ?
Du könntest die Daten über eine einfache Abfrage aus Excel heraus
importieren.
--> Menü: 'Daten'
--> Externe Daten importieren
--> Neue Abfrage erstellen... (Hierdurch wird MSQuery aufgerufen)
--> Microsoft Access Datenbank
--> [OK]
--> die gewünschte *.mdb selektieren
--> [OK]
--> Tabellen hinzufügen
--> Datenfelder auswählen
--> Durchklicken bis zum Ende
Nun hast Du einen aktualisierbaren Datenimport in Excel, der direkt auf
deine Access-Datenbank zugreift.
Teste wie sich dies verhält wenn die DB durch die User geöffnet ist.
Mit freundlichen Grüssen
Hallo Thomas,

Danke für Deinen guten Vorschlag, ich glaube damit werde ich klar kommen.
Ziel und Weg ist jetzt klar nun muß ich mich nur noch an die Arbeit machen.

Die Access-Anwendung ist wichtig läuft seit Jahren fast 20 Stunden täglich.
Da ich behutsam vorgehen muß, kann ich die Sache leider nicht sofort testen
und werde mir extra 2 andere Computer als Teststation aufbauen, denn ich
kann mir beim Testen keinen Systemausfall der Access-Anwendung erlauben.

Sobald ich fertig bin, melde ich mich wieder.
Nochmals besten Dank.

MfG
Robert
Thomas Ramel
2006-06-28 16:52:18 UTC
Permalink
Grüezi Robert

Robert Jakob schrieb am 28.06.2006
Post by Robert Jakob
Danke für Deinen guten Vorschlag, ich glaube damit werde ich klar kommen.
Ziel und Weg ist jetzt klar nun muß ich mich nur noch an die Arbeit machen.
Die Access-Anwendung ist wichtig läuft seit Jahren fast 20 Stunden täglich.
Da ich behutsam vorgehen muß, kann ich die Sache leider nicht sofort testen
und werde mir extra 2 andere Computer als Teststation aufbauen, denn ich
kann mir beim Testen keinen Systemausfall der Access-Anwendung erlauben.
Sobald ich fertig bin, melde ich mich wieder.
Fein; ich freue mich aufs Feedback und bin gespannt wie die Sache verläuft.
Post by Robert Jakob
Nochmals besten Dank.
Aber gerne doch.


Mit freundlichen Grüssen
Thomas Ramel
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2000 SP-3]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Robert Jakob
2006-07-05 07:10:57 UTC
Permalink
Am Wed, 28 Jun 2006 07:15:18 +0200 schrieb Thomas Ramel:

snip--
Post by Thomas Ramel
Du könntest die Daten über eine einfache Abfrage aus Excel heraus
importieren.
--> Menü: 'Daten'
--> Externe Daten importieren
--> Neue Abfrage erstellen... (Hierdurch wird MSQuery aufgerufen)
--> Microsoft Access Datenbank
--> [OK]
--> die gewünschte *.mdb selektieren
--> [OK]
--> Tabellen hinzufügen
--> Datenfelder auswählen
--> Durchklicken bis zum Ende
Nun hast Du einen aktualisierbaren Datenimport in Excel, der direkt auf
deine Access-Datenbank zugreift.
Teste wie sich dies verhält wenn die DB durch die User geöffnet ist.
Mit freundlichen Grüssen
Hallo Thomas,

habe die Datenbenk auf einen USB-Stick gezogen und dann alles so gemacht,
wie Du es beschrieben hast, gleichzeitig habe ich den Makrorekorder
mitlaufen lassen, den Code aufgezeichnet und danach etwas verändert.
Es läuft wie Du beschrieben hast, sehr schnell und einwandfrei.

Leider konnte ich noch nicht testen ob die Anwendung gestört wird, wenn ich
mit einem anderen Computer auf eine Tabelle zugreife, weil mein neues
Notebook welches ich extra für den Test von 2 Computern außerhalb der
Anwendung gekauft hatte, kein Query drauf hat.

Haben wir da bei der Installation von Office 2002 etwas vergessen ?
Mein Sohn hat mir gesagt, er habe eine Vollinstallation von Office 2002
ohne individuelle Änderungen gemacht.
Muß ich Query extra installieren ? Kannst Du mir da einen Tipp geben ?

MfG
Robert
Thomas Ramel
2006-07-05 07:50:22 UTC
Permalink
Grüezi Robert

Robert Jakob schrieb am 05.07.2006
Post by Robert Jakob
habe die Datenbenk auf einen USB-Stick gezogen und dann alles so gemacht,
wie Du es beschrieben hast, gleichzeitig habe ich den Makrorekorder
mitlaufen lassen, den Code aufgezeichnet und danach etwas verändert.
Es läuft wie Du beschrieben hast, sehr schnell und einwandfrei.
Das ist ja erstmal fein - es freut mich, wenns so gut klappt :-)
Post by Robert Jakob
Leider konnte ich noch nicht testen ob die Anwendung gestört wird, wenn ich
mit einem anderen Computer auf eine Tabelle zugreife, weil mein neues
Notebook welches ich extra für den Test von 2 Computern außerhalb der
Anwendung gekauft hatte, kein Query drauf hat.
Haben wir da bei der Installation von Office 2002 etwas vergessen ?
Mein Sohn hat mir gesagt, er habe eine Vollinstallation von Office 2002
ohne individuelle Änderungen gemacht.
Muß ich Query extra installieren ? Kannst Du mir da einen Tipp geben ?
MSQuery müsste IMO mit dabei sein - prüfe in der Systemsteuerung/Software,
ob MSQuery auch mit installiert wurde - ich mache in der Regel auch eine
Voll-Installation, prüfe dann aber nochmals ob wirklich alle Teile auch
installiert werden.


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Robert Jakob
2006-07-24 21:20:56 UTC
Permalink
Am Wed, 5 Jul 2006 09:50:22 +0200 schrieb Thomas Ramel:

snip
Post by Thomas Ramel
MSQuery müsste IMO mit dabei sein - prüfe in der Systemsteuerung/Software,
ob MSQuery auch mit installiert wurde - ich mache in der Regel auch eine
Voll-Installation, prüfe dann aber nochmals ob wirklich alle Teile auch
installiert werden.
Mit freundlichen Grüssen
Hallo Thomas,

nur kurze Information, der Fehler lag an einem fehlerhaften
vorinstallierten Programm auf dem neuen Rechner.

Nachdem eine bereinigte Version aufgespielt wurde läuft der
Rechner ohne Probleme und auch MSQuery funktioniert.

MfG
Robert
Thomas Ramel
2006-07-25 04:53:32 UTC
Permalink
Grüezi Robert

Robert Jakob schrieb am 24.07.2006
Post by Robert Jakob
Post by Thomas Ramel
MSQuery müsste IMO mit dabei sein - prüfe in der Systemsteuerung/Software,
ob MSQuery auch mit installiert wurde - ich mache in der Regel auch eine
Voll-Installation, prüfe dann aber nochmals ob wirklich alle Teile auch
installiert werden.
nur kurze Information, der Fehler lag an einem fehlerhaften
vorinstallierten Programm auf dem neuen Rechner.
Nachdem eine bereinigte Version aufgespielt wurde läuft der
Rechner ohne Probleme und auch MSQuery funktioniert.
Danke für die Rückmeldung - es ist gut zu wissen, dass ein Fehler keiner
war :-)


Mit freundlichen Grüssen
Thomas Ramel (@work)
--
- MVP für Microsoft-Excel -
[Win XP Pro SP-2 / xl2003 SP-1]
Microsoft Excel - Die ExpertenTipps:
(http://tinyurl.com/9ov3l und http://tinyurl.com/cmned)
Reiner Wolff
2006-06-28 05:26:33 UTC
Permalink
Moin Robert,
Post by Robert Jakob
bisher lese ich Daten von Access mit einem Umweg indem ich von Access aus
eine Datei im Excelformat ausgebe. Der Nachteil dabei ist, ich habe eine
Datei zwischengespeichert, die ich gar nicht brauche.
Nun möchte ich statt dessen gerne mit Excel plus VBA eine direkte
Datenabfrage machen und eine Access-Tabelle, die maximal einen Umfang von
bis zu 500 Datenzeilen mit bis zu 10 Datenspalten hat einfach einlesen.
Veständlich.
Post by Robert Jakob
Meine Wunschvorstelleung wäre, mit Excel plus VBA direkt auf die Access
Tabelle einen Lesezugriff zu machen ohne dort etwas zu verändern und zwar
auch dann wenn die Access-Anwendung gerade läuft oder auch nicht aktiv ist.
Die Accessanwendung läuft meist mit einem kleinen Netzwerk von 3 Rechner
und die Abfrage zur Analyse soll von einem der Drei aus erfolgen.
Meine abschließende Frage, kann man das realisieren ohne die Access
Anwendung zu stören ? und wenn wie könnte es gehen ?
Ja, das kann man.
Du greifst allerdings dann nicht auf die Access-Anwendung, sondern direkt
auf die Datenbank-Datei (.MDB) zu. Dies tust Du mit Hilfe der Datenbank
Jet-Engine (nichts anderes tut auch Access selbst).

Leider wird es dann in VBA (für jemanden, der sich das erste Mal damit
beschäftigt) etwas kompliziert. Prinzipiell hast Du 2 Zugriffsmöglichkeiten
auf Jet-Datenbanken (DAO und ADO).
Ich erkläre Dir erstmal den aktuelleren ADO-Zugriff, da ich für DAO grad
kein Code-Snippet parat habe.

Sub ADOZugriff()
'Diese Prozedur setzt einen gesetzten Verweis (Menü Extras - Verweise) auf
' Microsoft ActiveX Data Objects 2.x voraus
Dim cnn As ADODB.Connection
Dim rec As ADODB.Recordset
Dim strDatei As String

strDatei = "C:\DB1.mdb"

'Verbindung zur Datenbank herstellen
Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & strDatei & ";"
'ConnectionStrings für geschützte Datenbanken findest Du unter
'www.connectionStrings.com
.Open

'Ergebnisbereich aus der Datenbank abfragen
Set rec = New ADODB.Recordset
rec.Open "Select * From Tabelle", cnn,adOpenForwardOnly,adLockReadOnly

'Ergebnis der Abfrage auf das erste Tabellenblatt schreiben.
Worksheets(1).Cells(1,1).CopyFromRecordset rec
'Recordset wieder schließen
rec.Close
Set rec = Nothing
End With '(1) cn
'Verbindung wieder beenden
cnn.Close
Set cnn = Nothing
End Sub

Ich hoffe, Du kannst damit etwas anfangen. Aber vorsicht, der Code ist
ungetestet und für Deine Belange extra angepasst (könnte also Fehler
enthalten).
Ach noch eines: DAO ist prinzipiell für Dein Vorhaben der schnellere
Datenzugriff. Wenn Du das nochmal ausprobieren willst, googel mal danach
(läßt sich bestimmt etwas finden) und poste dann Deinen Code mit einer
kleinen Problembeschreibung.

Greetinx aus Kiel
Reiner
--
Wenn eine Idee nicht zuerst absurd erscheint, taugt sie nichts.
(Albert Einstein)
Robert Jakob
2006-06-28 16:16:48 UTC
Permalink
Post by Reiner Wolff
Moin Robert,
Post by Robert Jakob
bisher lese ich Daten von Access mit einem Umweg indem ich von Access aus
eine Datei im Excelformat ausgebe. Der Nachteil dabei ist, ich habe eine
Datei zwischengespeichert, die ich gar nicht brauche.
Nun möchte ich statt dessen gerne mit Excel plus VBA eine direkte
Datenabfrage machen und eine Access-Tabelle, die maximal einen Umfang von
bis zu 500 Datenzeilen mit bis zu 10 Datenspalten hat einfach einlesen.
Veständlich.
Post by Robert Jakob
Meine Wunschvorstelleung wäre, mit Excel plus VBA direkt auf die Access
Tabelle einen Lesezugriff zu machen ohne dort etwas zu verändern und zwar
auch dann wenn die Access-Anwendung gerade läuft oder auch nicht aktiv ist.
Die Accessanwendung läuft meist mit einem kleinen Netzwerk von 3 Rechner
und die Abfrage zur Analyse soll von einem der Drei aus erfolgen.
Meine abschließende Frage, kann man das realisieren ohne die Access
Anwendung zu stören ? und wenn wie könnte es gehen ?
Ja, das kann man.
Du greifst allerdings dann nicht auf die Access-Anwendung, sondern direkt
auf die Datenbank-Datei (.MDB) zu. Dies tust Du mit Hilfe der Datenbank
Jet-Engine (nichts anderes tut auch Access selbst).
Leider wird es dann in VBA (für jemanden, der sich das erste Mal damit
beschäftigt) etwas kompliziert. Prinzipiell hast Du 2 Zugriffsmöglichkeiten
auf Jet-Datenbanken (DAO und ADO).
Ich erkläre Dir erstmal den aktuelleren ADO-Zugriff, da ich für DAO grad
kein Code-Snippet parat habe.
Sub ADOZugriff()
'Diese Prozedur setzt einen gesetzten Verweis (Menü Extras - Verweise) auf
' Microsoft ActiveX Data Objects 2.x voraus
Dim cnn As ADODB.Connection
Dim rec As ADODB.Recordset
Dim strDatei As String
strDatei = "C:\DB1.mdb"
'Verbindung zur Datenbank herstellen
Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & strDatei & ";"
'ConnectionStrings für geschützte Datenbanken findest Du unter
'www.connectionStrings.com
.Open
'Ergebnisbereich aus der Datenbank abfragen
Set rec = New ADODB.Recordset
rec.Open "Select * From Tabelle", cnn,adOpenForwardOnly,adLockReadOnly
'Ergebnis der Abfrage auf das erste Tabellenblatt schreiben.
Worksheets(1).Cells(1,1).CopyFromRecordset rec
'Recordset wieder schließen
rec.Close
Set rec = Nothing
End With '(1) cn
'Verbindung wieder beenden
cnn.Close
Set cnn = Nothing
End Sub
Ich hoffe, Du kannst damit etwas anfangen. Aber vorsicht, der Code ist
ungetestet und für Deine Belange extra angepasst (könnte also Fehler
enthalten).
Ach noch eines: DAO ist prinzipiell für Dein Vorhaben der schnellere
Datenzugriff. Wenn Du das nochmal ausprobieren willst, googel mal danach
(läßt sich bestimmt etwas finden) und poste dann Deinen Code mit einer
kleinen Problembeschreibung.
Greetinx aus Kiel
Reiner
Hallo Reiner,

Danke für Deinen guten Vorschlag, ich glaube damit werde ich klar kommen.
Ziel und Weg ist jetzt klar nun muß ich mich nur noch an die Arbeit machen.

Die Access-Anwendung ist wichtig läuft seit Jahren fast 20 Stunden täglich.
Da ich behutsam vorgehen muß, kann ich die Sache leider nicht sofort testen
und werde mir extra 2 andere Computer als Teststation aufbauen, denn ich
kann mir beim Testen keinen Systemausfall der Access-Anwendung erlauben.

Sobald ich fertig bin, melde ich mich wieder.
Nochmals besten Dank.

MfG
Robert
Reiner Wolff
2006-06-28 20:32:03 UTC
Permalink
Moin Robert,
Post by Robert Jakob
Danke für Deinen guten Vorschlag, ich glaube damit werde ich klar kommen.
Ziel und Weg ist jetzt klar nun muß ich mich nur noch an die Arbeit machen.
[schnippel]
Post by Robert Jakob
Sobald ich fertig bin, melde ich mich wieder.
Nochmals besten Dank.
Danke für die Rückmeldung. Klingt so, als wäre das ganze spannend ;-)
Ich lese dann bei der nächsten Rückmeldung einfach mit Thomas gemeinsam
einen Beitrag mit. :-)

Greetinx aus Kiel
Reiner
--
Ein Programm, das du Freitags ablieferst, siehst du Montag wieder.
Loading...