С макросите по -долу можете да намерите и изтриете формули в клетки, които се отнасят до други работни книги.
Макросите не намират всички външни препратки, тъй като те гледат само във формулите на работния лист.
Sub DeleteOrListLinks () Dim i As Integer Ако ActiveWorkbook не е нищо След това излезте Sub i = MsgBox ("YES: Изтриване на външни препратки към формули" & Chr (13) & _ "NO: Списък на препратки към външни формули", _ vbQuestion + vbYesNoCancel, "Delete или избройте препратки към външни формули ") Изберете Case i Case vbДа DeleteExternalFormulaReferences Случай vbNo ListExternalFormulaReferences End Изберете End Sub Sub DeleteExternalFormulaReferences () Dim ws As Worksheet, AWS As String, ConfirmReplace As Boolean Dim i As Integer, OK As Book Sub i = MsgBox ("Потвърдете всички замествания на външни препратки към формули със стойности?", _ VbQuestion + vbYesNoCancel, "Преобразуване на външни препратки към формули") ActiveSheet.Name Application.ScreenUpdating = False За всеки ws В ActiveWorkbook.Worksheets OK = DeleteLinksInWS (ConfirmReplace, ws) Ако не е OK, излезте за следващия ws Set ws = Нищо таблици (A WS) .Изберете Application.ScreenUpdating = True End Sub Private Function DeleteLinksInWS (ConfirmReplace As Boolean, _ ws As Worksheet) Като Boolean Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = True Ако ws не е нищо, тогава излезте от функционалното приложение. StatusBar = "Изтриване на външни препратки към формули в" & _ ws.Name & "…" ws.Активиране за всеки cl В ws.UsedRange cFormula = cl.Formula Ако Len (cFormula)> 0 Тогава ако е наляво $ (cFormula, 1) = "=" Тогава Ако InStr (cFormula, "[")> 1 Тогава Ако не ConfirmReplace Тогава cl.Formula = cl.Value Else Application.ScreenUpdating = True cl. Изберете i = MsgBox ("Заменете формулата със стойността?", _ vbQuestion + vbYesNoCancel, _ "Заменете препратката към външна формула в" & _ cl.Address (False, False, xlA1) & _ "със стойността на клетката?") Application.ScreenUpdating = False Ако i = vbCancel Тогава DeleteLinksInWS = False Излезте от функцията End If If i = vbYes then On Error Resume Next 'в случай, че работният лист е защитен cl.Formula = cl.Value On Error GoTo 0 End If E nd Ако End Ако End Ако End Ако Следващ cl Задайте cl = Нищо Application.StatusBar = False End Функция Sub ListExternalFormulaReferences () Dim ws като работен лист, TargetWS като работен лист, SourceWB като работна книга, ако ActiveWorkbook е нищо, след това излезте от Sub Application.ScreenUpdating = False With ActiveWorkbook On Error Resume Next Set TargetWS = .Worksheets.Add (Преди: =. Worksheets (1)) If TargetWS Is Nothing then 'работната книга е защитена Set SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets (1) SourceWB.Activate Задайте SourceWB = Нищо не свършва, ако е с TargetWS .Range ("A1"). Formula = "Sequence" .Range ("B1"). Formula = "Cell" .Range ("C1"). Formula = "Formula" .Range ( "A1: C1"). Font.Bold = Истински край с за всеки ws В. Работни листове, ако не ws е TargetWS Тогава ListLinksInWS ws, TargetWS край, ако следващ ws Задайте ws = Нищо не завършва с TargetWS .Parent.Activate .Activate .Columns ("A: C"). AutoFit On Error Resume Next .Name = "List List" On Error GoTo 0 End With Set TargetWS = Нищо приложение.ScreenUpdati ng = True End Sub Private Sub ListLinksInWS (ws като работен лист, TargetWS като работен лист) Dim cl като диапазон, cFormula като низ, tRow толкова дълго, ако ws е нищо, след това излезте от Sub, ако TargetWS не е нищо, след това излезте от Sub Application.StatusBar = "Намиране на външно препратки към формули в "& _ ws.Name &" … "За всеки cl В ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 Тогава If Left $ (cFormula, 1) =" = "Тогава If InStr (cFormula , "[")> 1 След това с TargetWS tRow = .Range ("A" & .Rows.Count) .End (xlUp) .Row + 1 .Range ("A" & tRow) .Formula = tRow - 1 .Range ("B" & tRow) .Formula = ws.Name & "!" & _ cl.Address (False, False, xlA1) .Range ("C" & tRow) .Formula = "'" & cFormula Край с End Ако End Ако End Ако End Ако Следващ cl Задайте cl = Нищо Application.StatusBar = False End Sub