Herbers Excel-Forum - das Archiv
Schliessen aller verknüpften Arbeitsmappen mit VBA
Betrifft: Schliessen aller verknüpften Arbeitsmappen mit VBA
von: Wilfried
Geschrieben am: 13.10.2003 07:52:52
Hallo Zusammen
mein Problem vom Freitag konnte ich leider noch nicht lösen:
Ich habe folgendes Makro zum Öffen aller verknüpften Arbeitsmappen
Sub ÖffnenAllerVerknüpftenArbeitsmappen()
Dim Links As Variant
Links = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(Links) Then
For i = 1 To UBound(Links)
Workbooks.Open Links(i)
Next i
Else
MsgBox "Diese Arbeitsmappe hat keine Verknüpfungen zu anderen Mappen!"
End If
End Sub
Nun möchte ich das Programm so umbauen, dass alle verknüpften Arbeitsmappen wieder geschlossen werden. Dabei sind die folgenden Versuche gescheitert:
Sub SchliessenAllerVerknüpftenArbeitsmappen()
Dim Links As Variant
Links = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(Links) Then
For i = 1 To UBound(Links)
'Funktioniert nicht:
'Workbooks.Close Links(i)
'Funktioniert nicht:
'Workbooks(Links(i)).Close
Next i
Else
MsgBox "Diese Arbeitsmappe hat keine Verknüpfungen zu anderen Mappen!"
End If
End Sub
Ich würde mich freuen wenn jemand dazu eine Idee hat.
Gruss
Wilfried
Betrifft: AW: Schliessen aller verknüpften Arbeitsmappen mit VBA
von: Hajo_Zi
Geschrieben am: 13.10.2003 08:00:18
Hallo Wilfried
Option Explicit
Sub ÖffnenAllerVerknüpftenArbeitsmappen()
Dim Links As Variant
Dim I As Integer
Links = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(Links) Then
For I = 1 To UBound(Links)
Workbooks.Open Links(I)
Next I
Else
MsgBox "Diese Arbeitsmappe hat keine Verknüpfungen zu anderen Mappen!"
End If
End Sub
Sub SchliessenAllerVerknüpftenArbeitsmappen()
Dim Links As Variant
Dim I As Integer
Dim StDateiname As String
Dim InI As Integer
Links = ActiveWorkbook.LinkSources(xlExcelLinks)
If Not IsEmpty(Links) Then
For I = 1 To UBound(Links)
' Dateiname abtrennen
For InI = Len(Links(I)) To 1 Step -1
If Mid(Links(I), InI, 1) = "\" Then
StDateiname = Mid(Links(I), InI + 1, Len(Links(I)) - InI + 2)
Exit For
End If
Next InI
Workbooks(StDateiname).Close ' True fall speichern
Next I
Else
MsgBox "Diese Arbeitsmappe hat keine Verknüpfungen zu anderen Mappen!"
End If
End Sub
Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
http://home.media-n.de/ziplies/
Betrifft: AW: Schliessen aller verknüpften Arbeitsmappen mit VBA
von: Ramses
Geschrieben am: 13.10.2003 08:16:36
Hallo Hajo,
hab deine Antwort nicht gesehen.
Dafür mache ich's ohne Schleife :-), er kann also wählen :-)
Gruss Rainer
Betrifft: AW: Schliessen aller verknüpften Arbeitsmappen mit VBA
von: Hajo_Zi
Geschrieben am: 13.10.2003 08:18:40
Hallo Rainer
ich war mi nicht sicher ob es den VBA Befehl InStrRev schon unter 2000 gibt. Ich hatte es so in Erinnerung erst ab XP???
Falls Code vorhanden wurde dieser getestet unter Betriebssystem XP Pro und Excel Version XP SBE.
Bitte kein Mail, Probleme sollen im Forum gelöst werden.
Microsoft MVP für Excel
Das Forum lebt auch von den Rückmeldungen.
http://home.media-n.de/ziplies/
Betrifft: Anyway :-)
von: Ramses
Geschrieben am: 13.10.2003 08:39:08
Hallo Hajo,
ich dachte ab 2000 :-)
No Problem. Wilfried kann ja probieren :-))
Gruss aus San Francisco ( 23:45 Uhr )
Rainer
Betrifft: AW: Schliessen aller verknüpften Arbeitsmappen mit VBA
von: Wilfried
Geschrieben am: 13.10.2003 08:16:55
Hallo Hajo
ich hatte schon nicht mehr an eine Lösung geglaubt ......
Vielen Dank für Deine superschnelle und geniale Lösung.
Es funktioniert einwandfrei !!!
Gruss Wilfried
Betrifft: AW: Schliessen aller verknüpften Arbeitsmappen mit VBA
von: Ramses
Geschrieben am: 13.10.2003 08:15:30
Hallo,
mit dem Aufruf der Verknüpfungen speicherst du automatisch auch den ganzen Pfad mit.
Die Geöffnete Datei hat aber immer nur den Namen xyz.xls ohne Pfad.
Das heisst, du musst den Pfad extrahieren um den reinen Dateinamen zu erhalten.
Sub SchliessenAllerVerknüpftenArbeitsmappen()
Dim Links As Variant
Links = ActiveWorkbook.LinkSources(xlExcelLinks)
For i = 1 To UBound(Links)
Debug.Print Links(i)
'Workbooks.Open Links(i)
Next i
If Not IsEmpty(Links) Then
For i = 1 To UBound(Links)
'Damit extrahierst du den Pfad
Workbooks(Right(Links(i), Len(Links(i)) - InStrRev(Links(i), "\", -1))).Close
Next i
Else
MsgBox "Diese Arbeitsmappe hat keine Verknüpfungen zu anderen Mappen!"
End If
End Sub
Gruss Rainer
Betrifft: AW: Schliessen aller verknüpften Arbeitsmappen mit VBA
von: Wilfried
Geschrieben am: 13.10.2003 08:35:20
Hallo Rainer
vielen Dank für Deine spontane tolle Lösung die natürlich funktioniert. Dein Beitrag und der von Hajo haben mir wieder einmal vor Augen geführt wie gering meine VBA-Kenntnisse sind. Gut, dass es dieses Forum gibt...
Danke und Gruss
Wilfried