Sarakstiet, mainiet vai dzēsiet ārējās formulu atsauces (saites), izmantojot VBA programmā Microsoft Excel

Anonim

Izmantojot tālāk norādītos makro, jūs varat atrast un dzēst formulas šūnās, kas attiecas uz citām darbgrāmatām.
Makro neatrod visas ārējās atsauces, jo tās izskatās tikai darblapas formulās.

Sub DeleteOrListLinks () Dim i kā vesels skaitlis, ja ActiveWorkbook nav nekas, tad iziet Sub i = MsgBox ("JĀ: dzēst ārējās formulas atsauces" & Chr (13) & _ "NO: Sarakstīt ārējās formulas atsauces", _ vbQuestion + vbYesNoCancel, "Dzēst vai uzskaitīt ārējās formulas atsauces ") Atlasiet Lieta i Gadījums vbJā DzēstExternalFormulaReferences Lieta vbNo ListExternalFormulaReferences Beigas Atlasīt Beigt Sub Sub DzēstExternalFormulaReferences () Dim ws kā darblapa, AWS kā virkne, Apstiprināt Aizstāt kā Būla dimensiju kā veselu skaitli, Labi kā Būla, ja ActiveWorbook nav Apakš i = MsgBox ("Apstiprināt visas ārējo formulu atsauču aizstāšanu ar vērtībām?", _ VbQuestion + vbYesNoCancel, "Pārvērst ārējās formulas atsauces") ConfirmReplace = Nepareizi ActiveSheet.Name Application.ScreenUpdating = False katram ws ActiveWorkbook.Worksheets OK = DeleteLinksInWS (ConfirmReplace, ws) Ja nav labi, tad izejiet uz nākamo ws Set ws = Nekas lapas (A WS). Izvēlieties Application.ScreenUpdating = True End Sub Private Function DeleteLinksInWS (ConfirmReplace As Boolean, _ ws Kā darblapa) Kā Būla Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = True If ws is Nothing, tad iziet no funkcijas lietojumprogrammas. StatusBar = "Ārējo formulu atsauču dzēšana" & _ ws.Name & "…" ws.Aktivizēt katram cl In ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 Then If Left $ (cFormula, 1) = "=" Tad If InStr (cFormula, "[")> 1 Tad ja nav ApstiprinātReplace Tad cl.Formula = cl.Value Else Application.ScreenUpdating = True cl.Select i = MsgBox ("Aizstāt formulu ar vērtību?", _ vbQuestion + vbYesNoCancel, _ "Aizstāt ārējās formulas atsauci sadaļā" & _ cl.Address (False, False, xlA1) & _ "ar šūnas vērtību?") Application.ScreenUpdating = False Ja i = vbCancel Then DeleteLinksInWS = False Exit Function Beigt, ja i = vbJā, tad uz kļūdu Atsākt nākamo ', ja darblapa ir aizsargāta cl.Formula = cl.Value On Kļūda GoTo 0 End Ja E nd Ja beigas Ja beigas Ja beigas Ja beigas Ja nākamais cl Iestatiet cl = Nekas Application.StatusBar = False End Function Sub ListExternalFormulaReferences () Dim ws kā darblapa, TargetWS kā darblapa, SourceWB kā darbgrāmata Ja ActiveWorkbook nav nekas, tad izejiet no apakšprogrammas. ScreenUpdating = False With ActiveWorkbook On Error Atsākt Iestatīt TargetWS = .Worksheets.Add (Pirms: =. Darblapas (1)) Ja TargetWS nav nekas, tad darbgrāmata ir aizsargāta Set SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets (1) SourceWB.Activate Iestatīt avotuWB = Nekas nebeidzas, ja ar TargetWS. Diapazons ("A1"). Formula = "Secība". Diapazons ("B1"). Formula = "Šūna". Diapazons ("C1"). Formula = "Formula". Range ( "A1: C1"). Font.Bold = Patiess gals ar katru 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 Atsākt nākamo .Name = "Link List" On Error GoTo 0 End with Set TargetWS = Nothing Application.ScreenUpdati ng = Patiesā gala apakš privātā apakšsarakstsLinksInWS (ws kā darblapa, TargetWS kā darblapa) Dim cl As Range, cFormula kā virkne, tRow cik ilgi, ja ws is nothing, tad iziet no Sub if TargetWS Is Nothing, tad iziet no Sub Application.StatusBar = "Ārējā atrašana formulas atsauces "& _ ws.Name &" … "Katram cl In ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 Tad If Left $ (cFormula, 1) =" = "Tad If InStr (cFormula , "[")> 1 Tad ar 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 with End If End if End if Next cl Set cl = Nothing Application.StatusBar = False End Sub