Navedite, spremenite ali izbrišite zunanje sklice na formule (povezave) z uporabo VBA v Microsoft Excelu

Anonim

S spodnjimi makri lahko poiščete in izbrišete formule v celicah, ki se nanašajo na druge delovne zvezke.
Makri ne najdejo vseh zunanjih referenc, saj gledajo le v formulah delovnega lista.

Sub DeleteOrListLinks () Dim i As Integer Če ActiveWorkbook ni nič, potem zapustite Sub i = MsgBox ("DA: Izbriši sklice na zunanje formule" & Chr (13) & _ "NE: naštej sklice na zunanje formule", _ vbQuestion + vbYesNoCancel, "Delete") ali navedite sklice na zunanje formule ") Izberite Case i Case vbDa DeleteExternalFormulaReferences Case vbNo ListExternalFormulaReferences End Izberi End Sub Sub DeleteExternalFormulaReferences () Dim ws As Worksheet, AWS As String, ConfirmReplace As Boolean Dim i kot integer Sub i = MsgBox ("Potrdite vse zamenjave zunanjih sklicev na formule z vrednostmi?", _ VbQuestion + vbYesNoCancel, "Pretvori sklice na zunanje formule") ActiveSheet.Name Application.ScreenUpdating = False Za vsak ws v ActiveWorkbook.Worksheets OK = DeleteLinksInWS (ConfirmReplace, ws) Če ni v redu, potem zapustite Za naslednji ws Nastavi ws = Nič listov (A WS) .Izberite Application.ScreenUpdating = True End Sub Private Funkcija DeleteLinksInWS (ConfirmReplace As Boolean, _ ws As Worksheet) Kot Boolean Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = True Če ws ni nič, potem zaprite funkcijsko aplikacijo. StatusBar = "Brisanje zunanjih referenc formul v" & _ ws.Name & "…" ws.Aktiviraj za vsak cl V ws.UsedRange cFormula = cl.Formula Če je Len (cFormula)> 0 Potem če je Left $ (cFormula, 1) = "=" Potem če InStr (cFormula, "[")> 1 Potem Če ne PotrditeReplace then cl.Formula = cl.Value Else Application.ScreenUpdating = True cl. Izberite i = MsgBox ("Zamenjajte formulo z vrednostjo?", _ vbQuestion + vbYesNoCancel, _ "Zamenjaj zunanjo referenčno formulo v" & _ cl.Address (False, False, xlA1) & _ "z vrednostjo celice?") Application.ScreenUpdating = False Če je i = vbCancel Potem DeleteLinksInWS = False Izhodna funkcija Konec Če Če je i = vbDa Potem Napaka Nadaljuj Naprej 'v primeru, da je delovni list zaščiten cl.Formula = cl.Vrednost pri napaki Pojdi na 0 Konec Če E nd Če končate Če končate Če končate, če je naslednje cl Nastavite cl = Nič Application.StatusBar = False End Funkcija Pod ListExternalFormulaReferences () Zatemni kot delovni list, TargetWS kot delovni list, SourceWB kot delovni zvezek, če ActiveWorkbook ni nič, potem zapustite pod aplikacijo. ScreenUpdating = False With ActiveWorkbook On Error Nadaljuj Naslednji niz TargetWS =. Delovne liste.Dodaj (Pred: =. Delovni listi (1)) Če TargetWS ni nič, potem je »delovni zvezek zaščiten. Nastavite SourceWB = Nič konca, če je s TargetWS .Range ("A1"). Formula = "Zaporedje" .Range ("B1"). Formula = "Celica" .Range ("C1"). Formula = "Formula" .Range ( "A1: C1"). Font.Bold = True End With Za vsak ws V. Delovnih listih Če ni ws Je TargetWS Potem ListLinksInWS ws, TargetWS End Če Naslednji ws Nastavi ws = Nič se ne konča s TargetWS .Parent.Activate .Activate .Columns ("A: C"). AutoFit On Error Nadaljuj Next .Name = "List List" On Error GoTo 0 End With Set TargetWS = Nič Application.ScreenUpdati ng = True End Sub Private Sub ListLinksInWS (ws kot delovni list, TargetWS kot delovni list) Dim cl kot obseg, cFormula kot niz, tRow tako dolgo, če ws ni nič, potem zapustite pod, če TargetWS ni nič, potem zapustite pod aplikacijo.StatusBar = "Iskanje zunanjega sklice na formulo v "& _ ws.Name &" … "Za vsak cl V ws.UsedRange cFormula = cl.Formula Če Len (cFormula)> 0 Potem, če Left $ (cFormula, 1) =" = "Potem Če InStr (cFormula , "[")> 1 Nato z 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 Končaj s koncem Če se konča Če konec Če je naslednje Če je naslednje cl Nastavi cl = Nič Application.StatusBar = False End Sub