Išvardykite, pakeiskite arba ištrinkite išorines formulės nuorodas (nuorodas) naudodami „Microsoft Excel“ VBA

Anonim

Naudodami toliau pateiktas makrokomandas, galite rasti ir ištrinti formules langeliuose, nurodančiuose kitas darbaknyges.
Makrokomandos neranda visų išorinių nuorodų, nes jos atrodo tik darbalapio formulėse.

Sub DeleteOrListLinks () Dim i As Integer If ActiveWorkbook is nothing Tada Exit Sub i = MsgBox ("TAIP: Ištrinti išorines formulės nuorodas" & Chr (13) & _ "NO: Išorinių formulių nuorodų sąrašas", _ vbQuestion + vbYesNoCancel, "Ištrinti arba išvardyti išorines formulės nuorodas ") Pasirinkite atvejį i atvejis vbTaip IštrintiExternalFormulaReferences Byla vbNe ListExternalFormulaReferences Pabaiga Pasirinkite Pabaigos antrinis ištrynimasExternalFormulaReferences () Dim ws kaip darbalapis, AWS kaip eilutė, Patvirtinkite Sub i = MsgBox ("Patvirtinti visus išorinių formulių nuorodų pakeitimus reikšmėmis?", _ VbQuestion + vbYesNoCancel, "Konvertuoti išorines formulės nuorodas") ConfirmReplace = False Jei i = vbCancel Tada Exit Sub If i = vbYes Tada ConfirmReplace = True AWS = ActiveSheet.Name Application.ScreenUpdating = Klaidinga kiekvienam „ActiveWorkbook“ ws.Worksheets OK = DeleteLinksInWS (ConfirmReplace, ws) Jei negerai, tada išeikite kitam ws Nustatykite ws = Nėra lapų (A WS). Pasirinkite Application.ScreenUpdating = Tikroji pabaiga Privati ​​funkcija DeleteLinksInWS (ConfirmReplace As Boolean, _ ws As Workheet) Kaip Boolean Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = Tiesa, jei ws yra niekas, tada išeikite iš funkcijos programos. StatusBar = "Ištrinamos išorinės formulės nuorodos" & _ ws.Name & "…" ws.Activate For each cl In ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 then If Left $ (cFormula, 1) = "=" Tada If InStr (cFormula, "[")> 1 Tada jei ne PatvirtintiReplace Tada cl.Formula = cl.Value Else Application.ScreenUpdating = True cl.Select i = MsgBox ("Pakeisti formulę verte?", _ vbQuestion + vbYesNoCancel, _ "Pakeisti išorinės formulės nuorodą į & & cl Pabaiga Jei jei i = vbTaip, tada į klaidą tęskite kitą, jei darbalapis yra apsaugotas cl.Formula = cl.Value On Error GoTo 0 End If E nd Jei pabaiga Jei pabaiga Jei pabaiga Jei kita Jei nustatykite cl = Nothing Application.StatusBar = False End Function Sub ListExternalFormulaReferences () Dim ws kaip darbalapis, TargetWS kaip darbalapis, SourceWB kaip darbaknygė Jei ActiveWorkbook yra nieko, tada išeikite iš papildomos programos. ScreenUpdating = False With ActiveWorkbook On Error Resume Kitas Nustatykite TargetWS = .Worksheets.Add (Prieš: =. Darbo lapai (1)) Jei TargetWS yra niekas Tada “darbaknygė yra apsaugota Nustatykite SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets (1) SourceWB.Activate Nustatykite šaltinįWB = Nieko nesibaigs, jei su TargetWS .Range ("A1"). Formulė = "Seka". Diapazonas ("B1"). Formulė = "Langelis". Diapazonas ("C1"). Formulė = "Formulė" .Range ( "A1: C1"). Font.Bold = Tikroji pabaiga su kiekvienu ws In .Worksheets If Not ws Is TargetWS then ListLinksInWS ws, TargetWS End if Next ws Set ws = Nothing end With With TargetWS .Parent.Activate .Activate .Columns ("A: C"). AutoFit On Error Tęsti toliau .Name = "Link List" On Error GoTo 0 End with Set TargetWS = Nothing Application.ScreenUpdati ng = Tikrosios pabaigos subprivatus antrinis sąrašasLinksInWS (ws kaip darbalapis, „TargetWS“ kaip darbalapis) Dim cl As Range, cFormula As String, tRow as Long if ws is nothing Tada išeiti iš Sub, jei TargetWS Is Nothing, tada išeiti iš Sub Application.StatusBar = "Finding external formulės nuorodos "& _ ws.Name &" … "Kiekvienam cl In ws.UsedRange cFormula = cl.Formula Jei Len (cFormula)> 0 Tada If Left $ (cFormula, 1) =" = "Tada If InStr (cFormula , "[")> 1 Tada su TargetWS tRow = .Range ("A" & .Rows.Count) .End (xlUp) .Row + 1 .Range ("A" & tRow) .Formula = tRow - 1 .Range ("B" & tRow) .Formula = ws.Pavadinimas & "!" & _ cl.Address (False, False, xlA1). Range ("C" & tRow) .Formula = "'" & cFormula End with End If End Jei End If Next cl Set cl = Nothing Application.StatusBar = False End Sub