Pärchen sind Leute, die als Singles versagt haben.

Erstaunt!

In einer Excelmappe (Prinz) befinden sich mehrere Verknüpfungen auf andere Dateien:

Da diese Datei per VBA weiter verarbeitet werden soll, müssen die Verknüpfungen gelöscht werden. Beispielsweise so:

    Dim arrLinks As Variant
    Dim i As Integer

    arrLinks = ThisWorkbook.LinkSources(xlLinkTypeExcelLinks)
    
    If Not VBA.IsEmpty(arrLinks) Then
        For i = 1 To UBound(arrLinks)
            'MsgBox ThisWorkbook.LinkSources(xlLinkTypeExcelLinks)(i)
            ThisWorkbook.BreakLink Name:=arrLinks(i), Type:=xlLinkTypeExcelLinks
        Next
    End If

Die Verknüpfungen werden gelöscht – bis auf eine !?!

Ich schaue nach: diese Verknüpfung liegt auf einem geschützten Blatt.

Was mich irritiert ist, dass keine Fehlermeldung die Folge war: VBA übergeht einfach die Tatsache, dass die Verknüpfung nicht gelöst werden kann. Also hebt man den Blattschutz auf (und merkt ihn sich vorher):

    Dim blnBlattStatus() As Boolean
    i = ThisWorkbook.Worksheets.Count
    ReDim blnBlattStatus(i)


    For i = 1 To ThisWorkbook.Worksheets.Count
        blnBlattStatus(i) = ThisWorkbook.Worksheets(i).ProtectContents
        If ThisWorkbook.Worksheets(i).ProtectContents = True Then
            ThisWorkbook.Worksheets(i).Unprotect 
        End If
    Next

Und setzt ihn am Ende wieder:

    For i = 1 To ThisWorkbook.Worksheets.Count
        If blnBlattStatus(i) = True Then
            ThisWorkbook.Worksheets(i).Protect
        End If
    Next

Und schon sind alle Verknüpfungen gelöscht!

Wie viel Alkohol im Blut muss man haben, damit die nervigen Stechmücken daran sterben? Ich geh jetzt in die Offensive!

Hallo Rene,

Wie lautet denn der Befehl, zu prüfen, ob es in einer Datei Verknüpfungen gibt? Müsste irgendwas mit .LinkSources sein, aber wissen tu ichs nicht…

Viele Grüße, Dominic

Hallo Dominic,

ja LinkSource. Ich habe damals überprüft:

Application.EnableEvents = False ‚ — Falls die zu öffnende Datei Autostart-Makros enthält, sollen diese nicht geöffnet werden.
Err.Clear
Application.DisplayAlerts = False‘ — bei Excel 4.0-Dateien erscheint ein Warnhinweis!
Set xlDateiZumÖffnen = Application.Workbooks.Open(objDatei.Path, UpdateLinks:=0, Password:=“Renes Quatschwort“) ‚ — Datei öffnen
Application.DisplayAlerts = True‘ — bei Excel 4.0-Dateien erscheint ein Warnhinweis!
‚ xlDateiZumÖffnen.UpdateLinks = xlUpdateLinksNever ‚ — schalte die Warnmeldungen aus, wenn Fehler kommen, die darauf hinweisen, dass Links nicht vorhanden sind. -> leider nein!
If Err.Number = 0 Then
If Not VBA.IsEmpty(xlDateiZumÖffnen.LinkSources(xlExcelLinks)) Then
For i = 1 To UBound(xlDateiZumÖffnen.LinkSources(xlExcelLinks))
xlZelleZeiger.Offset(0, 6 + i).Value = xlDateiZumÖffnen.LinkSources(xlExcelLinks)(i)
Next
If UBound(xlDateiZumÖffnen.LinkSources(xlExcelLinks)) > 0 Then
xlZelleZeiger.Offset(0, 6).Value = _
UBound(xlDateiZumÖffnen.LinkSources(xlExcelLinks))
If Me.chkKaputt.Value = True Then
For i = 1 To UBound(xlDateiZumÖffnen.LinkSources(xlExcelLinks))
If VBA.Dir(xlDateiZumÖffnen.LinkSources(xlExcelLinks)(i), vbNormal) = „“ Then
xlZelleZeiger.Offset(0, 5).Interior.Color = vbBlack
End If
Next
End If
End If ‚ — trage die Anzahl der gefundenen Links ein und markiere schwarz
End If

[…]

An anderer Stelle überprüfe ich die Links (sie könnten ja „kaputt“ sein:

blnDateiSchutz = False
strLinkKaputt = „“
intAnzahlVerknuepfungen = 0
blnKaputt = False
If Not IsEmpty(xlDateiZumÖffnen.LinkSources(xlExcelLinks)) Then
intAnzahlVerknuepfungen = UBound(xlDateiZumÖffnen.LinkSources(xlExcelLinks))
For i = 1 To intAnzahlVerknuepfungen
strLink = xlDateiZumÖffnen.LinkSources(xlExcelLinks)(i)
If VBA.Dir(strLink, vbNormal) = „“ Then
strLinkKaputt = strLinkKaputt & „###“ & strLink
If strLink Like „“ & Me.txtQuelle.Value & „“ Then
‚ — alles paletti
Else
blnKaputt = True
End If
End If
Next
End If

Liebe Grüße

Rene

… viele Links …