Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
492to496
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
492to496
492to496
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Pfad zu allen Access-Verbindungen ändern

Pfad zu allen Access-Verbindungen ändern
30.09.2004 08:07:59
Hans
Hallo
In einer Excel-2000-Datei habe ich in verschiedenen Sheets viele Verbindungen zu einer Access-DB. Leider wird im Excel offenbar der ganze Pfad zur Access-DB hinterlegt, obwohl beide Dateien im gleichen Verzeichnis liegen.
Wie kann ich am einfachsten den Pfad aller Verbindungen ändern? Oder kann ich in der ursprünglichen Verbindung eine relative Verbindung angeben, dh. in diesem Falle bloss den Dateinamen ohne Pfad?
Danke für Hilfe
Hans

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pfad zu allen Access-Verbindungen ändern
30.09.2004 08:23:49
Oberschlumpf
Hi Hans
Ich weiß nicht genau, ob ich Dich richtig verstanden habe.
Versuch mal am Anfang des Makros mit
ChDrive = "Der LW-Buchstabe, wo DeinVerzeichnis liegt"
CurDir = "DeinVerzeichnis"
Und nun kannst Du alle fixen Pfadangaben entfernen.
Wenn der Hintergrund Deiner Frage damit zusammenhängt, dass die XL-Datei nur auf Deinem PC funktioniert, sollte das Problem jetzt gelöst sein.
Konnte ich helfen?
Ciao
Thorsten
AW: Pfad zu allen Access-Verbindungen ändern
30.09.2004 08:53:16
Hans
Hi Thorsten
Der Hintergrund ist genau der, welcher Du vermutest: Ich habe die Angelegenheit auf meinem Rechner entwickelt - und das ganze soll jetzt auf einen anderen Rechner mit anderen Pfaden.
Ich vermute, dass Dein Ansatz gut ist. Da ich aber schon lange nicht mehr VBA programmiert habe, wäre ich Dir dankbar, wenn Du noch etwas mehr ausholen könntest.
PS: Die Verbindungen habe ich folgendermassen gemacht:
Menü: Daten: Externe Daten: Neue Abfrage erstellen... Access...
Hans
Anzeige
AW: Pfad zu allen Access-Verbindungen ändern
Oberschlumpf
Hallo Hans
Da ich aber leider Deinen Code nich kenne, und Du ihn beharrlich für Dich behältst ;-), wie soll ich da weiter ausholen können?
Ich kann es nur so weit versuchen....
...schreib am Anfang Deines Codes, da, wo die Access-Verbindungen hergestellt werden dies hier:
ChDrive = "LW:"
ChDir = "DeinVerzeichnis"
(die Funktion CurDir, die ich zuerst vorschlug, passt doch nicht so ganz richtig)
LW steht für DAS Laufwerk, auf dessen Partition/Festplatte Deine XL-Dateien und die Access-DB gespeichert sind
DeinVerzeichnis steht für DAS Verzeichnis, in dem Deine Dateien gespeichert sind
Nun greift Excel-VBA bei allen Datei-Funktionen, bei denen explizit KEINE Pfadangaben vorgegeben wurden, auf das Verzeichnis zu, welches Du mit ChDrive und ChDir eingestellt hast.
Und eben all die Pfadangaben, die Du, bezogen auf den Zugriff auf die Access-DB, noch im Code stehen hast, kannst Du alle so entfernen, dass nur noch der Dateiname der MDB-Datei da steht.
Da Du "VBA = gut" angegeben hattest, ging ich davon aus, dass ich sooo weit nicht ausholen muss.
Funktioniert Deine XL-Datei nun so, wie Du es wünscht?
Bye
Thorsten
Anzeige
AW: Pfad zu allen Access-Verbindungen ändern
30.09.2004 09:37:58
Hans
Hallo Thorsten
Die Verbindungen habe ich nicht mit VBA gemacht, sondern via
Menü: Daten: Externe Daten: Neue Abfrage erstellen... Access...
Ich müsste also einen Makro schreiben, in dem alle vorhandenen Verbindungen umgebogen werden.
Zur Angabe von VBA-Kenntnis: Es fehlt irgendwie eine Angabe "minimale Kenntisse". Hin und wieder muss ich etwas in VBA machen - aber dann lange nichts mehr. Und so habe ich zwar Kenntnisse, aber eben im Moment nicht mehr gut ;-)
AW: Pfad zu allen Access-Verbindungen ändern
Oberschlumpf
Hi
Kannst Du nicht mal eine Bsp-Datei auf dem Server speichern?
Eine Idee vllt noch.
Führe dies hier noch mal aus:
Menü: Daten: Externe Daten: Neue Abfrage erstellen... Access
aber starte vorher den Makro-Recorder
Nun hast Du den VBA-Code und kannst ihn entsprechend anpassen.
Wenn das auch nix hilft, dann, wie gesagt, ne Bsp-Xl und MDB-Datei auf den Server, ok?
Bye
Thorsten
Anzeige
AW: Pfad zu allen Access-Verbindungen ändern
30.09.2004 11:08:21
Hans
Halli Thorsten
Ich getrau mich fast nicht, so oft Deine Zeit in Anspruch zu nehmen...
Ich habe die Datei auf den Server geladen:
https://www.herber.de/bbs/user/11494.xls
Darin hat es einige Verbindungen zu einer Access-Datei (Es gibt dann noch viel mehr Verbindungen auf neuen Sheets).
Der Pfad dieser Verbindungen muss ich letztendlich umbiegen, weil das ganze letztendlich auf einem anderen Rechner läuft. Am liebsten hätte ich dann grad einen relativen Pfad, dh.: Weil die Access-Datei im gleichen Verzeichnis liegt, würde (hoffentlich) der Dateiname ohne Pfad genügen.
Hans
Anzeige
AW: Pfad zu allen Access-Verbindungen ändern
Oberschlumpf
Hi Hans
Mit Deiner Datei konnte ich leider nicht viel anfangen, weil ja eben die dazugehörige MDB-Datei fehlt.
Ich hab jetzt mal Folgendes durchgeführt:
Zuerst habe ich...
1. Den Makrorecorder gestartet
2. Die Befehle "Daten/externe Daten importieren/neue Abfrage erstellen/Microsoft Access...usw" durchgeführt,
mit dem Recorder aufgezeichnet, und heraus kam dieser VBA-Code:

Sub Makro1()
' Makro1 Makro
' Makro am 30.09.2004 von Thorsten aufgezeichnet
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=Microsoft Access-Datenbank;DBQ=C:\Test\CD-Sammlung.mdb;DefaultDir=C:\Test;DriverId=25;FIL=MS Access;MaxBufferSize=2048;Page" _
), Array("Timeout=5;")), Destination:=Range("A1"))
.CommandText = Array( _
"SELECT Haupttabelle.`CD-Nr`, Haupttabelle.ProgName, Haupttabelle.Beschreibung" & Chr(13) & "" & Chr(10) & "FROM `C:\Test\CD-Sammlung`.Haupttabelle Haupttabelle" _
)
.Name = "Abfrage von Microsoft Access-Datenbank"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub

Wie Du erkennen kannst, ist die Access-DB im Verzeichnis "C:\Test" gespeichert.
In diesem Verzeichnis befindet sich auch die XL-Datei.
Ich habe den Code dann wie folgt umgeändert:

Sub Makro1()
' Makro1 Makro
' Makro am 30.09.2004 von Thorsten aufgezeichnet
ChDrive (Left(ThisWorkbook.Path, 2))
ChDir (ThisWorkbook.Path)
With ActiveSheet.QueryTables.Add(Connection:=Array(Array("ODBC;DSN=Microsoft Access-Datenbank;DBQ=" & CurDir & "\CD-Sammlung.mdb;DefaultDir=" & CurDir & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;Page"), Array("Timeout=5;")), Destination:=Range("A1"))
.CommandText = Array("SELECT Haupttabelle.`CD-Nr`, Haupttabelle.ProgName, Haupttabelle.Beschreibung" & Chr(13) & "" & Chr(10) & "FROM `" & CurDir & "\CD-Sammlung`.Haupttabelle Haupttabelle")
.Name = "Abfrage von Microsoft Access-Datenbank"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = True
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.PreserveColumnInfo = True
.Refresh BackgroundQuery:=False
End With
End Sub

Mit ChDrive & ChDir habe ich zuerst DAS Verzeichnis eingestellt, in dem die XL- und die
Access-Datei gespeichert sind.
Dann habe ich in allen Code-Zeilen die Zeichenfolge "C:\Test" gegen CurDir ausgetauscht.
(die Funktion CurDir gibt das aktuell eingestellte Verzeichnis zurück - in diesem
Bsp "C:\Test")
Jetzt wird in dem Code, wo vorher das Verzeichnis "C:\Test" vorgegeben war, IMMER in DEM
Verzeichnis nach der Access-DB 'gesucht', aus dem heraus auch die XL-Datei gestartet
wurde.
Zum Beweis habe ich...
1. die Xl- und Access-Datei auf einer anderen Festplatte und in einem anders lautenden
Verzeichnis gespeichert
2. Das Verzeichnis "C:\Test" und die Dateien darin gelöscht
3. die XL-Datei im neuen Verzeichnis gestartet
Und das Ergebnis?
Egal, wo ich die XL-Datei starte....
...immer wird die, im gleichen Verzeichnis gespeicherte Access-DB, 'gefunden' und ausgewertet
Also....das Problem scheint gelöst zu sein :-)
Du kannst ja jetzt versuchen, nach dieser 'Anleitung' genau so vorzugehen.
Vielleicht mit einer Kopie Deiner Excel-Datei und eine Änderung nach der anderen.
Ich würd mich freuen, wenn Du auch bei Erfolg eine Rückmeldung machst.
Bis Dann :-)
Thorsten
(sorry, wenn die Ansicht jetzt ein wenig in die Breite geht)
Anzeige
konnte ich helfen oder nicht?..oT
01.10.2004 17:35:41
Oberschlumpf
AW: konnte ich helfen oder nicht?..oT
02.10.2004 08:27:53
Hans
Hallo Thorsten
Ich bin noch nicht dazugekommen. Nächste Woche werde ich mich damit beschäftigen.
Leider kann ich Dir noch nicht endgültig sagen, ob mein Problem gelöst ist. Ich danke Dir aber schon einmal - Dein schneller Support war super. Danke.
Ich wünsche ein schönes Wochenende.
Hans
AW: konnte ich helfen oder nicht?..oT
04.10.2004 08:19:54
Hans
Hallo Thorsten
So - jetzt bin ich wieder da.
Dein Vorschlag bezieht sich auf neu zu erstellende Bereiche - oder verstehe ich etwas falsch?
Mein Problem ist: In einer vorhandenen Excel-Datei in allen Sheets und da in allen Querytables den Pfad zu ersetzen.
Vielleicht hast Du mir grad einen schnellen Einstieg? Nochmals vielen Dank.
Hans
Anzeige
AW: konnte ich helfen oder nicht?..oT
Oberschlumpf
Hi Hans
Du kannst meinen VBA-Code auch in bestehende Excel-Tabellen/Dateien einfügen.
Das Problem ist nur, dass Du halt jede Abfrage, die mit "Daten/externe Daten...etc" erstellt wurde, durch mein VBA-Code ersetzen musst.
Am besten lässt sich dies wohl lösen, wenn Du in diesen Abschnitt jedes Tabellenblattes meinen Code einfügst:

Private Sub Worksheet_Activate()
hier mein VBA-Code
End Sub

Das Worksheet-Activate Ereignis bewirkt, dass der hier eingetragene Code immer dann durchgeführt wird, wenn das jeweilige Tabellenblatt aktiviert oder eben angezeigt wird.
Hier noch mal eine zeilenweise Erklärung meines Codes:

1 Sub Makro1()
2 '
3 ' Makro1 Makro
4 ' Makro am 30.09.2004 von Thorsten aufgezeichnet
5 '
6
7 '
8     ChDrive (Left(ThisWorkbook.Path, 2))
9     ChDir (ThisWorkbook.Path)
10
11 With ActiveSheet.QueryTables.Add(Connection:=Array(Array("ODBC;DSN=Microsoft Access-Datenbank;DBQ=" & CurDir & "\CD-Sammlung.mdb;DefaultDir=" & CurDir & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;Page"), Array("Timeout=5;")), Destination:=Range("A1"))
12         .CommandText = Array("SELECT Haupttabelle.`CD-Nr`, Haupttabelle.ProgName, Haupttabelle.Beschreibung" & Chr(13) & "" & Chr(10) & "FROM `" & CurDir & "\CD-Sammlung`.Haupttabelle Haupttabelle")
13         .Name = "Abfrage von Microsoft Access-Datenbank"
14         .FieldNames = True
15         .RowNumbers = False
16         .FillAdjacentFormulas = False
17         .PreserveFormatting = True
18         .RefreshOnFileOpen = False
19         .BackgroundQuery = True
20         .RefreshStyle = xlInsertDeleteCells
21         .SavePassword = True
22         .SaveData = True
23         .AdjustColumnWidth = True
24         .RefreshPeriod = 0
25         .PreserveColumnInfo = True
26         .Refresh BackgroundQuery:=False
27     End With
28 End Sub

1. Start des Makros
2. - 7. nur Informationen, die auch gelöscht werden können
8. Es wird DAS Laufwerk eingestellt, auf dem die Excel-Datei gespeichert ist, die dieses Makro aufruft
9. Es wird DAS Verzeichnis eingestellt, in dem die Excel-Datei gespeichert ist, die dieses Makro aufruft
(Zeile 8 und 9 setzen in diesem Makro voraus, dass auch die Access-Datenbank im gleichen Verzeichnis, wie die Excel-Datei gespeichert ist. Aber so ist es ja nach Deinen Angaben auch.)
11. Es wird eine ODBC-Verbindung zur Access-Datenbank hergestellt.
Hier musst Du natürlich selbst mit Hilfe des Makrorecorders den VBA-Code erzeugen, da in diesem Bsp von mir der verwendete Dateiname 'CD-Sammlung.mdb' und die verwendeten Datenfelder nicht mit Deiner Datenbank übereinstimmen.
12. Hier steht der Abfragebefehl an die Datenbank in Form einer SQL-Syntax
13. - 27. Diese Zeilen wie auch 11. und 12. werden durch den Makrorecorder automatisch erstellt.
Hinweis zu 11. und 12.
Nachdem Du den Code der Zeilen 11. - 27. mit dem Makrorecorder aufgezeichnet hast, wird in den Zeilen 11. und 12. anstelle von CurDir ein fester Verzeichnispfad incl. des Dateinamens der Access-Datenbank stehen.
Du musst diesen Verzeichnispfad durch CurDir ersetzen!
Sonst funktioniert dieses Makro auf einem anderen PC nicht.
So, ich habe fertig mit Erklärungen :-)
Es ist zwar ein wenig viel Arbeit, was auf Dich zukommt, aber mir ist leider keine andere Lösung außer VBA bekannt, mit der ich Zugriffe auf Verzeichnisse dynamisch halten kann.
Andere scheinen auch nicht mehr zu wissen, sonst hätten bestimmt weitere Beiträge hier gestanden.
Aber da ja auch DU in VBA = gut zu sein scheinst, wird die Umsetzung wohl für Dich nicht so ein Problem, oder?
Ich bin neugierig auf Dein Feedback.
Bye
Thorsten
Anzeige
AW: konnte ich helfen oder nicht?..oT
04.10.2004 16:00:42
Hans
Hallo Thorsten
Du hast es nicht leicht mit mir - sorry.
Bevor ich Deinen Code einsetze - darf ich noch eine Frage stellen. Wenn dies gehen würde, wäre es einfacher...
In meiner vorhandenen Excel-Datei in allen Sheets und da in allen Querytables den Pfad zu ersetzen:
EIN Event-Makro beim Öffnen der xls-Datei
_Iteration für Alle Sheets
__Interation für Alle Querytables
____Pfad ersetzen in 1 Querytable
__end
_end
end
Thorsten am liebsten würde ich Dich zu einem Bier treffen und Dir für Deine Mühe danken.
Hin und wieder staune ich über die Menschen positiv ;-)
Hans
Anzeige
AW: konnte ich helfen oder nicht?..oT
Oberschlumpf
Hi Hans
Neuer Versuch
Versuch es mal mit diesen Dateien, bevor Du den VBA-Code auf Deine Daten los lässt :-)
https://www.herber.de/bbs/user/11657.zip
In dieser ZIP-Datei befinden sich die XL- und eine Bsp-DB-Datei.
Teste erst mal mit diesen Dateien, UND verstehe, was da passiert.
Sobald sich beide Dateien im selben Verzeichnis befinden (nicht mehr in der ZIP-Datei)
und Du die XL-Datei startest, passiert folgendes
1. beim Öffnen der XL-Datei wird die 1. Verbindung zur Access-DB hergestellt.
2. jetzt werden aus der DB die Daten für Tabelle1 "geholt" und eingetragen
3. es wird eine 2. Verbing zur DB hergestellt
4. jetzt werden aus der DB die Daten für Tabelle2 "geholt" und eingetragen
5 es wird eine 3. Verbing zur DB hergestellt
6 jetzt werden aus der DB die Daten für Tabelle3 "geholt" und eingetragen
Somit werden in "einem Rutsch" 3 verschiedene Excel-Tabellenblätter mit Daten aus ein und derselben Access-DB "gefüttert".
Soo, und wehe Du hast es jetzt noch immer nicht verstanden....grins...nee..war Spaß..bei weiteren Fragen wieder hier posten.
Ob aber ich dann noch zu den Antwortern gehöre, weiß ich noch nicht.(auch für mich gibts ja noch andere Dinge außer Excel ;-) )
Aber wir werden sehen :-)
Wegen des Bieres, zu dem Du ich einladen wolltest..grins...ich nehme auch ne Kiste :)
Meine eMail-Adresse ist 'thgob@yahoo.de'
Ich freu mich immer über Mails...grins
Bye & viel Erfolg
Thorsten
P.S.
Ab morgen musst Du wieder einen neuen Thread öffnen, da dieser ab morgen hier nicht mehr sichtbar ist
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige
Archiv - Verwandte Themen
Forumthread
Beiträge