Lijst, wijzig of verwijder externe formuleverwijzingen (links) met VBA in Microsoft Excel

Anonim

Met onderstaande macro's kun je formules in cellen zoeken en verwijderen die verwijzen naar andere werkmappen.
De macro's vinden niet alle externe verwijzingen omdat ze alleen in de werkbladformules kijken.

Sub DeleteOrListLinks() Dim i As Integer If ActiveWorkbook Is Nothing Then Exit Sub i = MsgBox("YES: Delete external formula references" & Chr(13) & _ "NO: List external formula references", _ vbQuestion + vbYesNoCancel, "Delete of lijst externe formulereferenties") Selecteer Case i Case vbYes DeleteExternalFormulaReferences Case vbNo ListExternalFormulaReferences End Selecteer End Sub Sub DeleteExternalFormulaReferences() Dim ws As Worksheet, AWS As String, ConfirmReplace As Boolean Dim i As Integer, OK As Boolean If ActiveWorkbook Is Nothing Dan Afsluiten Sub i = MsgBox ("Bevestig alle vervangingen van externe formuleverwijzingen met waarden?", _ vbQuestion + vbYesNoCancel, "Converteer externe formuleverwijzingen") ConfirmReplace = False If i = vbCancel Then Exit Sub If i = vbYes Then ConfirmReplace = True AWS = ActiveSheet.Name Application.ScreenUpdating = False For Each ws In ActiveWorkbook.Worksheets OK = DeleteLinksInWS(ConfirmReplace, ws) Indien niet OK, dan afsluiten voor volgende ws Set ws = Nothing Sheets(A WS).Selecteer Application.ScreenUpdating = True End Sub Private Function DeleteLinksInWS(ConfirmReplace As Boolean, _ws As Worksheet) As Boolean Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = True Als ws Niets is, sluit dan de functietoepassing af. StatusBar = "Externe formuleverwijzingen verwijderen in " & _ ws.Name & "… " ws.Activate For Each cl In ws.UsedRange cFormula = cl.Formula If Len(cFormula) > 0 Then If Left$(cFormula, 1) = "=" Then If InStr(cFormula, "[") > 1 Then If Not ConfirmReplace Then cl.Formula = cl.Value Else Application.ScreenUpdating = True cl.Select i = MsgBox("Vervang de formule door de waarde?", _ vbQuestion + vbYesNoCancel, _ "Vervang externe formuleverwijzing in " & _ cl.Address(False, False, xlA1) & _ " door de celwaarde?") Application.ScreenUpdating = False If i = vbCancel Then DeleteLinksInWS = False Exit Function End If If i = vbYes Then On Error Hervat volgende ' indien het werkblad is beveiligd cl.Formule = cl.Value On Error GoTo 0 End If E nd If End If End If End If Next cl Set cl = Nothing Application.StatusBar = False End Functie Sub ListExternalFormulaReferences() Dim ws As Worksheet, TargetWS As Worksheet, SourceWB As Workbook Als ActiveWorkbook niets is, sluit dan Sub Application.ScreenUpdating = False With af ActiveWorkbook On Error Hervatten Volgende Set TargetWS = .Worksheets.Add (Before:=.Worksheets(1)) Als TargetWS niets is, is de werkmap beveiligd Set SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets(1) SourceWB.Activate Set SourceWB = Nothing End If With TargetWS .Range("A1").Formula = "Sequence" .Range("B1").Formula = "Cell" .Range("C1").Formula = "Formula" .Range( "A1:C1").Font.Bold = True End With For Each ws In .Worksheets Indien niet ws Is TargetWS Dan ListLinksInWS ws, TargetWS End If Next ws Set ws = Nothing End With With TargetWS .Parent.Activate .Activate .Columns ("A:C").AutoFit On Error Resume Next .Name = "Link List" On Error GoTo 0 End With Set TargetWS = Nothing Application.ScreenUpdati ng = True End Sub Private Sub ListLinksInWS(ws As Worksheet, TargetWS As Worksheet) Dim cl As Range, cFormula As String, tRow As Long Als ws niets is, dan Sub afsluiten Als TargetWS niets is, dan Sub Application afsluiten.StatusBar = "Extern zoeken formuleverwijzingen in " & _ ws.Name & "… " For Each cl In ws.UsedRange cFormula = cl.Formula If Len(cFormula) > 0 Then If Left$(cFormula, 1) = "=" Then If InStr(cFormula , "[") > 1 Dan Met DoelWS tRij = .Bereik("A" & .Rijen.Aantal).End(xlOmhoog).Rij + 1 .Bereik("A" & tRij).Formule = tRij - 1 .Bereik ("B" & tRow).Formule = ws.Naam & "!" & _ cl.Address(False, False, xlA1) .Range("C" & tRow).Formula = "'" & cFormula End With End If End If End If Next cl Set cl = Nothing Application.StatusBar = False End Sub