Microsoft Excel'de VBA kullanarak harici formül referanslarını (bağlantıları) listeleyin, değiştirin veya silin

Anonim

Aşağıdaki makrolar ile diğer çalışma kitaplarına başvuran hücrelerdeki formülleri bulabilir ve silebilirsiniz.
Makrolar, yalnızca çalışma sayfası formüllerine baktıklarından tüm dış referansları bulamaz.

Sub DeleteOrListLinks() Dim i ActiveWorkbook Hiçbir Şey Değilse Tamsayı Olarak Dim O zaman Exit Sub i = MsgBox("EVET: Harici formül referanslarını sil" & Chr(13) & _ "HAYIR: Harici formül referanslarını listele", _ vbQuestion + vbYesNoCancel, "Sil veya harici formül referanslarını listeleyin") Case i Case i Case vbYes DeleteExternalFormulaReferences Case vbNo ListExternalFormulaReferences End Select End Sub Sub DeleteExternalFormulaReferences() Dim ws As Worksheet, AWS As String, ConfirmReplace As Boolean Dim i As Integer, Hiçbir Şey Yok ise Boole Olarak Tamam, Çık Sub i = MsgBox("Tüm harici formül referanslarının değerlerle değiştirilmesini onayla?", _ vbQuestion + vbYesNoCancel, "Harici formül referanslarını dönüştür") ConfirmReplace = False If i = vbCancel O zaman Sub'dan Çık Eğer i = vbYes O zaman ConfirmReplace = True AWS = ActiveSheet.Name Application.ScreenUpdating = ActiveWorkbook.Worksheets'teki Her ws İçin Yanlış Tamam = DeleteLinksInWS(ConfirmReplace, ws) Tamam Değilse Sonraki ws İçin Çık Set ws = Hiçbir Şey Sheets(A WS).Select Application.ScreenUpdating = True End Sub Private Function DeleteLinksInWS(ConfirmReplace As Boolean, _ ws As Worksheet) Olarak Boolean Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = ws Hiçbir Şey Değilse, İşlev Uygulamasından Çıkın. StatusBar = "" & _ ws.Name & "… " içindeki harici formül referansları siliniyor. ws.Activate For Her cl In ws.UsedRange cFormula = cl.Formula If Len(cFormula) > 0 Then If Left$(cFormula, 1) = "=" O zaman If InStr(cFormula, "[") > 1 Sonra OnaylanmadıysaDeğiştir Sonra cl.Formula = cl.Value Başka Application.ScreenUpdating = True cl.Select i = MsgBox("Formülü değerle değiştirelim mi?", _ vbQuestion + vbYesNoCancel, _ " & _ cl.Address(False, False, xlA1) & _ " içindeki harici formül referansını hücre değeriyle değiştiriniz mi?") Application.ScreenUpdating = False If i = vbCancel Sonra DeleteLinksInWS = False Exit Function Eğer i = vbYes ise Sonlandır Sonra Hatada Devam Et Sonraki ' çalışma sayfasının korumalı olması durumunda cl.Formula = cl.Value On Error Git 0 E ise Bitir nd If End If End If End If Sonraki cl Set cl = Nothing Application.StatusBar = False End Function Sub ListExternalFormulaReferences() Dim ws Çalışma Sayfası Olarak, TargetWS Çalışma Sayfası Olarak, SourceWB Çalışma Kitabı Olarak ActiveWorkbook Hiçbir Şey Değilse Alt Uygulamadan Çıkın.ScreenUpdating = İle Yanlış ActiveWorkbook On Error Resume Next Set TargetWS = .Worksheets.Add(Before:=.Worksheets(1)) Eğer TargetWS Hiçbir Şey Değilse, ' çalışma kitabı korumalı olarak ayarlayın SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets(1) SourceWB.Activate Set SourceWB = TargetWS ile Hiçbir Şey Bitmez .Range("A1").Formula = "Sequence" .Range("B1").Formula = "Hücre" .Range("C1").Formula = "Formula" .Range( "A1:C1").Font.Bold = .Worksheets In .Worksheets Değilse, TargetWS Olursa, True End ile Doğru Son O zaman ListLinksInWS ws, TargetWS Eğer Sonraki ws Set ws = Hiçbir Şey, TargetWS ile Bitmez .Parent.Activate .Activate .Columns ("A:C").Hatada Otomatik Sığdır Sonraki Devam Et .Name = Hatada "Bağlantı Listesi" GoTo 0 End With Set TargetWS = Hiçbir Şey Application.ScreenUpdati ng = True End Sub Private Sub ListLinksInWS(ws As Worksheet, TargetWS As Worksheet) Dim cl As Range, cFormula As String, tRow As Long Eğer ws Hiçbir Şey Değilse O Zaman Exit Sub Eğer TargetWS Hiçbir Şey Değilse O zaman Exit Sub Application.StatusBar = "Harici Bulma " & _ ws.Name & "… " içindeki formül referansları Her cl için ws.UsedRange'de cFormula = cl.Formula If Len(cFormula) > 0 Then If Left$(cFormula, 1) = "=" Then If InStr(cFormula) , "[") > 1 Sonra TargetWS ile tRow = .Range("A" & .Rows.Count).End(xlUp).Row + 1 .Range("A" & tRow).Formül = tRow - 1 .Range ("B" ve tRow).Formül = ws.Name & "!" & _ cl.Address(False, False, xlA1) .Range("C" & tRow).Formula = "'" & cFormula End With End If End If Next If Next cl Set cl = Hiçbir Şey Application.StatusBar = False End Sub