Blue Flower

Suchen nach Links (externen Bezügen) in einer Arbeitsmappe

Wenn beim Öffnen die Meldung kommt "Diese Datei enthält Verknüpfungen zu anderen Datenquellen" git es innerhalb von Excel einen/mehrere Verweise auf externe Quellen.
Speziell wenn eine Tabellen-Blatt kopiert wurde und in dieser Verknüfungen hinterlegt waren.

Formeln / Verknüfungen in Zellen
Der erste Schritt ist immer per STRG-R nach den Zeichen "[" bzw. "'[" zu suchen. Dann kann der Verweis auf die externe Datei z.B. [externe Datei.xlsx] mit '' (entfernen) ersetzt werden. Meistens löst dieses löschen das Problem.

Formeln / Verknüfungen in der Datenüberprüfung
Wenn jetzt beim nächsten öffnen immer noch der Hinweis kommt liegt das vermutlich an einer Datenüberprüfung. Wenn z.B. eine Auswahlliste für Felder erstellt wurden. Um einen schnellen Überbkick zu bekommen kann via "Daten > Bereich Datentools > Datenüberprüfung > Ungültige Daten einkreisen" einen Hinweis liefern.

Sollte das alles nicht Helfen muss per VBA danach gesucht werden.
Einfach den VBA-Editor öffen ( ALT-F11) und folgenden Code dort in ein neues Modul einfügen (Alt-E Alt-M).
Vorab den Direktbereich anzeigen lassen (STRG-D). Da dort das Ergebnis ausgegeben wird.
Cursor in die Sub setzen und per F5 die Sub starten. Wird jetzt eine externe Verknüpfung gefunden wird die betroffenen Tabelle samt Felder ausgedruckt.

 

Sub find_external_links()
  Dim oWB As Workbook, oWSs As Worksheets, oWS As Worksheet, oCell As Object, oO As Object
  Dim i%, j%, r%, c%, rMax%, cMax%, sValidationExternalLink$, sExternalLink$, sFormatConditions$, sNames$, s$
  
  
  ' Zelle finden in denen ein Link auf eine externe Excel-Datei besteht.
  Const cfExternalLink = True
  
  ' Externe Links in einer Datenüberprüfung finden
  Const cfValidationExternalLink = True
  ' Wenn etwas gefunden wird den Befehl "Ungültige Daten einkreisen" ausführen.
  ' Es werden aber nicht immer alle fehlerhaften Felder markiert. Die Formel =#BEZUG! wird nicht markiert.
  ' Markierung wieder löschen: Register Daten > Bereich Datentools > Datenüberprüfung > Gültigkeitskreise löschen
  Const cfHiglightFields = True
  
  
  ' Bedinge Formatierungen einer Zelle auf externen Link testen
  Const cfFormatConditions = True
  
  ' Namen (Feldbezeichnung) im Names-Manager
  Const cfNames = True
  
  Application.ScreenUpdating = False
  Application.Visible = False
  
  
  On Error Resume Next
  Set oWB = ActiveWorkbook
  For Each oWS In oWB.Worksheets
    With oWS
      .Select
      ' Die Zelle markieren welche den äußersten Rand des Zellbereichs markiert mit veränderten Zellen
      ActiveCell.SpecialCells(xlLastCell).Select
      
      rMax = ActiveCell.Row
      cMax = ActiveCell.Column
       
      For r = 1 To rMax
        For c = 1 To cMax
          Set oCell = oWS.Cells(r, c)
          With oCell
            
            If cfExternalLink Then
              s = .Formula
              If s <> vbNullString Then
                If InStr(1, s, "[", vbTextCompare) Then
                  sExternalLink = sExternalLink & Replace(.Address(True, False), "$", vbNullString, , 1, vbTextCompare) & "|"
                End If
              End If
            End If
            
            If cfValidationExternalLink Then
              s = vbNullString
              s = .Validation.Formula1
              If s <> vbNullString Then
                If InStr(1, s, "[", vbTextCompare) Then
                  sValidationExternalLink = sValidationExternalLink & Replace(.Address(True, False), "$", vbNullString, , 1, vbTextCompare) & "|"
                End If
              End If
              s = vbNullString
              s = .Validation.Formula2
              If s <> vbNullString Then
                If cfValidationExternalLink Then
                  If InStr(1, s, "[", vbTextCompare) Then
                    sValidationExternalLink = sValidationExternalLink & Replace(.Address(True, False), "$", vbNullString, , 1, vbTextCompare) & "|"
                  End If
                End If
              End If
            End If
            
            If cfFormatConditions Then
              j = .FormatConditions.Count
              For i = 1 To j
                Set oO = .FormatConditions.Item(i)
                s = vbNullString
                s = oO.Formula1
                If InStr(1, s, "[", vbTextCompare) Then
                  sFormatConditions = sFormatConditions & Replace(.Address(True, False), "$", vbNullString, , 1, vbTextCompare) & "|"
                  Exit For
                End If
                s = vbNullString
                s = oO.Formula2
                If InStr(1, s, "[", vbTextCompare) Then
                  sFormatConditions = sFormatConditions & Replace(.Address(True, False), "$", vbNullString, , 1, vbTextCompare) & "|"
                  Exit For
                End If
              Next
            End If
            
          End With
        Next
        
      Next
      
      If sExternalLink <> vbNullString Then
        Debug.Print vbCrLf & "Externe Links in folgenden Feldern der Tabelle '" & oWS.Name & "' gefunden."
        Debug.Print Left(sExternalLink, Len(sExternalLink) - 1)
        sExternalLink = vbNullString
      End If
      
      If sValidationExternalLink <> vbNullString Then
        Debug.Print vbCrLf & "Externe Links in der Datenüberprüfung folgender Zellen der Tabelle '" & oWS.Name & "' gefunden. " & IIf(cfHiglightFields, "Zellen wurden rot umkreist!", vbNullString)
        Debug.Print Left(sValidationExternalLink, Len(sValidationExternalLink) - 1)
        sValidationExternalLink = vbNullString
        If cfHiglightFields Then ActiveSheet.CircleInvalid
      End If
      
      If sFormatConditions <> vbNullString Then
        Debug.Print vbCrLf & "Externe Links in der bedingten Formatierung folgender Zellen der Tabelle '" & oWS.Name & "' gefunden. " & IIf(cfHiglightFields, "Zellen wurden rot umkreist!", vbNullString)
        Debug.Print Left(sFormatConditions, Len(sFormatConditions) - 1)
        sFormatConditions = vbNullString
      End If
            
    End With
  Next
    
  If cfNames Then
    With oWB
      j = .Names.Count
      For i = 1 To j
        Set oO = .Names.Item(i)
        s = vbNullString
        s = oO.Value
        If InStr(1, s, "[", vbTextCompare) Then
          sNames = sNames & oO.Name & "|"
        End If
      Next
    End With
      
    If sNames <> vbNullString Then
      Debug.Print vbCrLf & "Externe Links in benannte Zellen / -Zellbreiche gefunden (Names-Manager)"
       Debug.Print Left(sNames, Len(sNames) - 1)
    End If
  End If
  
  
  Set oCell = Nothing
  Set oWB = Nothing
  Application.Visible = True
  Application.ScreenUpdating = True
End Sub