Wyświetlaj, zmieniaj lub usuwaj zewnętrzne odniesienia do formuł (linki) za pomocą VBA w programie Microsoft Excel

Anonim

Za pomocą poniższych makr możesz znajdować i usuwać formuły w komórkach, które odwołują się do innych skoroszytów.
Makra nie znajdują wszystkich odwołań zewnętrznych, ponieważ przeglądają tylko formuły arkusza roboczego.

Sub DeleteOrListLinks() Dim i As Integer Jeśli ActiveWorkbook nie jest niczym, to Exit Sub i = MsgBox("TAK: Usuń zewnętrzne odwołania do formuł" & Chr(13) & _ "NIE: Wyświetl listę zewnętrznych odwołań do formuł", _ vbQuestion + vbYesNoCancel, "Delete lub wyświetl odwołania do formuł zewnętrznych") Wybierz Case i Case vbYes DeleteExternalFormulaReferences Case vbNo ListExternalFormulaReferences End Wybierz End Sub Sub DeleteExternalFormulaReferences() Dim ws As Worksheet, AWS As String, ConfirmReplace As Boolean Dim i As Integer, OK As Boolean Jeśli ActiveWorkbook nie jest niczym Następnie zakończ Sub i = MsgBox("Potwierdź wszystkie zamiany odwołań do formuł zewnętrznych na wartości?", _ vbQuestion + vbYesNoCancel, "Konwertuj odwołania do formuł zewnętrznych") ConfirmReplace = False If i = vbCancel Then Exit Sub If i = vbYes Then ConfirmReplace = True AWS = ActiveSheet.Name Application.ScreenUpdating = False For Every ws In ActiveWorkbook.Worksheets OK = DeleteLinksInWS(ConfirmReplace, ws) Jeśli nie OK, to zakończ, aby przejść do następnego ws Ustaw ws = Nic Arkusze(A WS).Select 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 If ws is Nothing, a następnie wyjdź z aplikacji funkcji. StatusBar = "Usuwanie zewnętrznych odwołań do formuł w " & _ 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("Zamienić formułę na wartość?", _ vbQuestion + vbYesNoCancel, _ "Zamień odwołanie do formuły zewnętrznej w " & _ cl.Address(False, False, xlA1) & _ " na wartość komórki?") Application.ScreenUpdating = False If i = vbCancel Then DeleteLinksInWS = False Funkcja wyjścia End If i = vbYes Then On Error Resume Next ' w przypadku, gdy arkusz jest chroniony cl.Formula = cl.Value On Error GoTo 0 End If E nd If End If End If End If Next cl Set cl = Nic Application.StatusBar = False End Function Sub ListExternalFormulaReferences() Dim ws As Worksheet, TargetWS As Worksheet, SourceWB As Workbook Jeśli ActiveWorkbook jest niczym, a następnie wyjdź z Sub Application.ScreenUpdating = False With ActiveWorkbook On Error Resume Next Ustaw TargetWS = .Worksheets.Add(Before:=.Worksheets(1)) Jeśli TargetWS jest niczym Then ' skoroszyt jest chroniony Set SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets(1) SourceWB.Activate Ustaw SourceWB = Nothing End If With TargetWS .Range("A1").Formula = "Sequence" .Range("B1").Formula = "Cell" .Range("C1").Formula = "Formula" .Range( "A1:C1". ("A:C").AutoFit Przy błędzie Wznów Dalej .Name = "Lista linków" Przy błędzie Przejdź do 0 Zakończ z ustawieniem TargetWS = Nic Application.ScreenUpdati ng = True End Sub Private Sub ListLinksInWS(ws As Worksheet, TargetWS As Worksheet) Dim cl As Range, cFormula As String, trRow As Long Jeśli ws to Nic, To Exit Sub Jeśli TargetWS to Nic, To Exit Sub Application.StatusBar = "Znajdowanie zewnętrznego odwołania do formuł w " & _ 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 Then With TargetWS tRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 .Range("A" & tRow).Formula = tRow - 1 .Range ("B" i tRow).Formuła = ws.Nazwa & "!" & _ cl.Address(False, False, xlA1) .Range("C" & tRow).Formula = "'" & cFormula End With End If End If Next cl Set cl = Nic Application.StatusBar = False End Sub