Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Verbindung ändern

VBA Verbindung ändern
14.06.2020 00:44:41
and2handles
Hallo Leute,
ich möchte Verbindungen automatisch in VBA ändern. Hierzu konnte ich im Forum einen schon passenden Beitrag finden mit jenem Code:
Sub Ändern()
Dim PfadALT As String, PfadNEU As String
PfadALT = Sheets("Tabelle1").Range("F2").Text
PfadNEU = Sheets("Tabelle1").Range("F1").Text
ActiveWorkbook.ChangeLink PfadALT, PfadNEU, Type:=xlExcelLinks
End Sub
Soweit ich das verstanden habe, muss in der Zelle F1-F2 der Pfad wo sich die Dateien befinden abgebildet werden.
In meinem Fall ist dies:
[F1]: C:\Users\and2h\Desktop\VErbindung\[11.xlsm]
[F2]: C:\Users\and2h\Desktop\VErbindung\[10.xlsm]
Im Optimalfall würde er jetzt die alte Verbindung 10 durch 11 ersetzen. Stattdessen bekomme ich einen Laufzeitfehler 1004. Hat jemand Tipps was ich falsch mache und wie man dies beheben kann?
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Verbindung ändern
14.06.2020 02:13:31
ralf_b
in deinem beispiel ist der pfad innerhalb einer datei.
du hast aber ausserhalb den pfad. wenn du den um ein arbeitsblatt und eine zelle erweiterst sollte es gehen , sofern deine dateien auch dort liegen
AW: VBA Verbindung ändern
14.06.2020 09:35:18
and2handles
Morgen Ralf,
ich hab mir jetzt sicherlich 10 mal deine Antwort durchgelesen aber ich verstehe leider immer noch nicht so ganz worauf du hinaus möchtest.
Ich soll die Pfadangabe F1 und F2 auf eine andere Arbeitsmappe in der Datei schreiben und diese z.b. auf die Zellen F1:G1 und F2:G2 erweitern?
Anzeige
AW: VBA Verbindung ändern
14.06.2020 09:58:33
and2handles
Falls das noch zur Verständlichkeit beiträgt, ich möchte das Klicken auf den Reiter Daten, Verknüpfungen bearbeiten, Quelle ändern automatisieren.
Sorry war spät, kann da mal wer anders ran owT
14.06.2020 12:49:37
ralf_b
..
AW: Sorry war spät, kann da mal wer anders ran owT
14.06.2020 13:02:09
and2handles
Ich habe dabei einfach das Problem, dass all die Lösungen im Internet zu nichts führen. Des Weiteren funktioniert die Verbindungsänderung einwandfrei wenn ich es händisch mache aber Excel stürzt ab sobald ich es als Makro aufnehme während ich es händisch mache um dadurch besser verstehen zu können wie dies funktioniert.
Anzeige
AW: Sorry war spät, kann da mal wer anders ran owT
14.06.2020 14:17:02
ralf_b
gehts evtl auch anders als mit changelinks
kommt ja drauf an was genau du vorhast. das mit den f:g hab ich nciht soo kapiert was in den link soll und was nicht.
Sub hyperlinkmod()
' hyperlinkmod Makro
' verändert links in zellen
Dim x As Hyperlink
Dim isect As Object
For Each x In ActiveSheet.Hyperlinks
Set isect = Intersect(Range("F1:G2"), x.Range)
If Not isect Is Nothing Then
x.Address = ActiveSheet.Range("B7")   'neuer Pfad
' x.SubAddress =      'verweis auf tabelle und zelle
End If
Next
End Sub

Anzeige
AW: Sorry war spät, kann da mal wer anders ran owT
15.06.2020 08:12:20
and2handles
Guten Morgen Ralf,
sorry für die späte Antwort aber brauchte einmal ein wenig Auszeit nachdem ich mich zu lange damit beschäftige aber keine Lösung finden konnte.
Ich habe auf mehreren Arbeitsmappen in einer Datei Pfade die auf z.B eine andere Datei Datei1.xlsm verweisen. Per manuelles Klicken könnte ich jetzt unter "Daten" "Verknüpfungen ändern" diese Pfade zu Datei2.xlsm ändern. Das würde ich gerne automatisieren, dass die Verweise in den Zellen dynamisch sind.
Ich dachte erst, dass man dies mit dem ChangeLink befehl machen könnte aber dabei gibt es die Fehlermeldung 1004, wenn ich es mit der Indirekt funktion mache habe ich nichts gewonnen da ich hierfür ja die Datei öffnen muss aus denen ich die Daten ziehe.
Um deine Frage mit den F1 - G2 zu beantworten. Hier wäre zum beispiel der AlterPfad und der NeuerPfad und ich dachte man kann VBA sagen: Changelink AlterPfad mit NeuerPfad.
Anzeige
AW: Sorry war spät, kann da mal wer anders ran owT
15.06.2020 18:18:32
ralf_b
vielleicht so, sofern deine verbindungen auch hyperlinks sind
Sub hyperlinkmod()
' hyperlinkmod Makro
' verändert links in zellen
Dim x As Hyperlink
Dim isect As Object
For Each x In ActiveSheet.Hyperlinks
If x.Address = Alterpfad Then
x.Address =  NeuerPfad   'neuer Pfad
' x.SubAddress =      'verweis auf tabelle und zelle
End If
Next
End Sub

Anzeige
AW: Sorry war spät, kann da mal wer anders ran owT
16.06.2020 07:54:29
and2handles
Leider sind es keine Hyperlinks, ich hatte jetzt nen Workaround mit Datei öffnen gefunden. Bin damit nicht ganz zufrieden aber habe das Gefühl, dass dies häufiger vorkommt als einem lieb ist.
Danke erst einmal für deine Tipps. Die haben mich auf jeden Fall zum Nachdenken angeregt und als Inspiration das Problem zu lösen :)
Anzeige
AW: VBA Verbindung ändern
15.06.2020 09:42:38
and2handles
Hallo Toni,
danke für den Tipp. Leider bekomme ich hierbei auch einen Fehler.
Habe das ganze jetzt mit nem Workaround gemacht welcher folgenden Code hat:
Sub Open_ExistingWorkbook()
'öffnet Workbook
Pfad = Sheets("Tabelle1").Range("D1").Text
Workbooks.Open Pfad
'Kopiert Daten heraus
Windows("Text.xlsx").Activate
Selection.Copy
Windows("Makrotest.xlsm").Activate
Range("A1").Select
ActiveSheet.Paste
Windows("Text.xlsx").Activate
Range("B1:B12").Select
Application.CutCopyMode = False
Selection.Copy
Windows("Makrotest.xlsm").Activate
Range("B1").Select
ActiveSheet.Paste
'schließt Workbook
Workbooks Pfad.Close SaveChanges:=False
End Sub
Hierbei verstehe ich nicht ganz wie die Syntax genau funktioniert.
Workbooks.Open Pfad funktioniert einwandfrei aber für
Workbooks Pfad.Close SaveChanges:=False funktioniert dies nicht. Hatte statt ("dateiname.xlsx") dies mit Pfad ersetzt aber alle Syntaxvariationen sind gescheitert.
Anzeige
AW: VBA Verbindung ändern
15.06.2020 09:57:47
and2handles
Hab es :D
Workbooks(Mid(Pfad, InStrRev(Pfad, "\") + 1)).Close
aber ganz schön kompliziert im Vergleich zum öffnen.
AW: VBA Verbindung ändern
15.06.2020 18:41:28
Toni
Hi,
hätte erwartet, dass die mid() noch eine String-Länge benötigt, aber wenn es so klappt ...
Schön, dass Du Deine eigene Lösung gefunden hast, so bleibt am meisten haften ;)
lG
Toni
Anzeige
AW: VBA Verbindung ändern
16.06.2020 07:52:03
and2handles
Ich habe es auch nur durch Zufall gefunden. Habe keinen Plan was mid und pfad macht aber so lange es funktioniert.
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Verbindungen automatisch ändern


Schritt-für-Schritt-Anleitung

Um die Verbindungen in Excel mit VBA zu ändern, kannst Du den folgenden Code verwenden. Dieser Code setzt voraus, dass die Pfade in bestimmten Zellen Deiner Excel-Tabelle gespeichert sind.

Sub Ändern()
    Dim PfadALT As String, PfadNEU As String
    PfadALT = Sheets("Tabelle1").Range("F2").Text
    PfadNEU = Sheets("Tabelle1").Range("F1").Text
    ActiveWorkbook.ChangeLink PfadALT, PfadNEU, Type:=xlExcelLinks
End Sub

Stelle sicher, dass die Zellen F1 und F2 den korrekten Pfad zu den Excel-Dateien enthalten. In Deinem Beispiel könnte dies wie folgt aussehen:

  • F1: C:\Users\and2h\Desktop\VErbindung\[11.xlsm]
  • F2: C:\Users\and2h\Desktop\VErbindung\[10.xlsm]

Häufige Fehler und Lösungen

Ein häufiges Problem, das Benutzer erleben, ist der Laufzeitfehler 1004. Hier sind einige Lösungen:

  1. Falsche Pfadangabe: Überprüfe, ob die Pfade in den Zellen korrekt sind. Entferne eventuell eckige Klammern, da diese oft zu Fehlern führen können.

  2. Dateipfad außerhalb des Arbeitsblatts: Achte darauf, dass die Pfade in der richtigen Arbeitsmappe angegeben sind. Wenn Du den Pfad in einer anderen Zelle in einem anderen Arbeitsblatt hast, musst Du den Code entsprechend anpassen.

  3. Hyperlinks vs. Verknüpfungen: Wenn Du Hyperlinks verwendest, könnte der Code zur Änderung der Hyperlinks wie folgt aussehen:

Sub hyperlinkmod()
    Dim x As Hyperlink
    Dim isect As Object
    For Each x In ActiveSheet.Hyperlinks
        Set isect = Intersect(Range("F1:G2"), x.Range)
        If Not isect Is Nothing Then
            x.Address = ActiveSheet.Range("B7")   'neuer Pfad
        End If
    Next
End Sub

Alternative Methoden

Wenn das Ändern der Verbindungen mit ChangeLink nicht funktioniert, gibt es alternative Methoden:

  1. Manuelles Ändern der Verknüpfungen: Du kannst die Verknüpfungen auch manuell unter "Daten" > "Verknüpfungen bearbeiten" ändern. Dies ist jedoch zeitaufwändig.

  2. Makros zur Automatisierung: Du kannst Makros erstellen, die Daten aus anderen Arbeitsmappen kopieren, anstatt die Verknüpfungen zu ändern. Ein Beispielcode könnte so aussehen:

Sub Open_ExistingWorkbook()
    Dim Pfad As String
    Pfad = Sheets("Tabelle1").Range("D1").Text
    Workbooks.Open Pfad
    ' Kopiere Daten heraus
    ' (Dein Code hier)
    Workbooks(Mid(Pfad, InStrRev(Pfad, "\") + 1)).Close SaveChanges:=False
End Sub

Praktische Beispiele

Hier sind einige Anwendungsbeispiele, wie Du ChangeLink und andere Methoden nutzen kannst:

  • Ändern von Verbindungen in einer Tabelle: Wenn Du mehrere Verbindungen in einer Tabelle hast, kannst Du mit einer Schleife durch alle Hyperlinks gehen und sie entsprechend ändern.

  • Automatisierung des Datenimports: Wenn Du regelmäßig Daten aus einer bestimmten Datei importierst, kannst Du die oben genannten Methoden verwenden, um diesen Prozess zu automatisieren.


Tipps für Profis

  • Verwendung von Variablen: Definiere Pfade und Dateinamen als Variablen, um Deinen Code flexibler zu gestalten.

  • Fehlerbehandlung einbauen: Implementiere Fehlerbehandlung in Deinem VBA-Code, um Laufzeitfehler abzufangen und besser zu diagnostizieren.

  • Dokumentation: Kommentiere Deinen Code gut, damit Du und andere Nutzer in Zukunft leichter nachvollziehen können, was jeder Teil des Codes bewirken soll.


FAQ: Häufige Fragen

1. Wie kann ich den Laufzeitfehler 1004 vermeiden?
Überprüfe, ob die Pfade korrekt sind und ob die Dateien tatsächlich existieren. Vergewissere Dich, dass die Zellen die richtigen Werte enthalten.

2. Kann ich mehrere Links gleichzeitig ändern?
Ja, Du kannst eine Schleife verwenden, um durch mehrere Links zu iterieren und sie entsprechend zu ändern.

3. Was sind Hyperlinks in Excel?
Hyperlinks in Excel sind Verknüpfungen zu externen Dateien oder Webseiten. Sie können mit VBA geändert werden, um die Adressen dynamisch anzupassen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige