Loetlege, muutke või kustutage väliseid valemiviiteid (linke), kasutades Microsoft Excelis VBA -d

Anonim

Allolevate makrode abil saate leida ja kustutada lahtreid, mis viitavad teistele töövihikutele.
Makrod ei leia kõiki väliseid viiteid, kuna neid vaadatakse ainult töölehe valemites.

Sub DeleteOrListLinks () Dim i täisarvuna, kui ActiveWorkbook pole midagi, siis väljuge Sub i = MsgBox ("JAH: väliste valemiviidete kustutamine" & Chr (13) & _ "NO: Loetle välised valemiviited", _ vbQuestion + vbYesNoCancel, "Kustuta või loetlege väliseid valemiviiteid ") Valige juhtum i juhtum vbJah KustutaExternalFormulaReferences Case vbNo ListExternalFormulaReferences Lõpp Valige Lõpp Alam alam KustutaExternalFormulaReferences () Dim ws kui tööleht, AWS kui string, ConfirmReplace As Boolean Dim i As Integer, OK As Boolean If ActiveWitbook Alam i = MsgBox ("Kas kinnitada kõik väliste valemiviidete asendused väärtustega?", _ VbQuestion + vbYesNoCancel, "Teisenda välisvalemiviited") ConfirmReplace = False If i = vbCancel then Exit Sub If i = vbYes then ConfirmReplace = True AWS = ActiveSheet.Name Application.ScreenUpdating = ActiveWorkbooki iga ws vale. Töölehed OK = DeleteLinksInWS (ConfirmReplace, ws) Kui pole korras, siis väljuge järgmiste ws Set ws = Nothing Sheets (A WS). Valige Application.ScreenUpdating = True End Sub Private Function DeleteLinksInWS (ConfirmReplace As Boolean, _ ws as Workheet) Boolean Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = True If ws is nothing, siis väljuge funktsioonirakendusest. StatusBar = "Väliste valemiviidete kustutamine" & _ ws.Name & "…" ws. Aktiveeri iga cl jaoks ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 Then If Left $ (cFormula, 1) = "=" Siis If InStr (cFormula, "[")> 1 Siis kui ei kinnitaReplace Siis cl.Formula = cl.Value Else Application.ScreenUpdating = True cl.Select i = MsgBox ("Asendada valem väärtusega?", _ vbQuestion + vbYesNoCancel, _ "Asenda välimine valemiviide lahtris & & cl cl. Aadress (vale, vale, xlA1) & _" lahtri väärtusega? ") Application.ScreenUpdating = Vale Lõpp If Kui i = vbJah siis On Error Resume Next 'juhul kui tööleht on kaitstud cl.Formula = cl.Value On Error GoTo 0 End If E nd Kui lõpp Kui lõpp Kui lõpp Kui järgmine Järgmine Määra cl = Nothing Application.StatusBar = False End Function Sub ListExternalFormulaReferences () Dim ws kui tööleht, TargetWS kui tööleht, SourceWB kui töövihik Kui ActiveWorkbook pole midagi, siis välju alamrakendusest. ScreenUpdating = False With ActiveWorkbook tõrke korral Jätka järgmine Määra TargetWS = .Worksheets.Add (Enne: =. Töölehed (1)) Kui TargetWS pole midagi, siis on töövihik kaitstud Set SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets (1) SourceWB.Activate Määra allikasWB = Miski ei lõpe, kui see on koos TargetWS. Vahemik ("A1"). Valem = "Järjestus". Vahemik ("B1"). Valem = "Lahter". Vahemik ("C1"). Valem = "Valem". Vahemik ( "A1: C1"). Font.Bold = Tõeline lõpp iga töös oleva töölehega. Töölehed, kui mitte, on sihtmärkWS Siis ListLinksInWS ws, TargetWS lõpeb, kui järgmine ws Määra ws = Mitte midagi ei lõpe koos sihtmärgigaWS .Parent.Activate .Activate .Columns ("A: C"). AutoFit On Error Jätka järgmist .Name = "Link List" On On GoTo 0 End With Set TargetWS = Nothing Application. ng = Tõelise lõpu alam privaatne alamloendLinksInWS (ws kui tööleht, sihtmärgi tööleht) kui tööleht valemiviited lahtris "& _ ws.Name &" … "Iga cl jaoks ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 Siis If Left , "[")> 1 Siis koos TargetWS tRow = .Range ("A" & .Rows.Count) .End (xlUp) .Rida + 1 .Range ("A" & tRow) .Formula = tRow - 1 .Range ("B" & tRida) .Vormel = ws.Nimi & "!" & _ cl.Address (False, False, xlA1) .Range ("C" & tRow) .Formula = "'" & cFormula End with End If End Kui End If Next cl Set cl = Nothing Application.StatusBar = False End Sub