Λίστα, αλλαγή ή διαγραφή εξωτερικών αναφορών τύπου (συνδέσεις) χρησιμοποιώντας VBA στο Microsoft Excel

Anonim

Με τις παρακάτω μακροεντολές μπορείτε να βρείτε και να διαγράψετε τύπους σε κελιά που παραπέμπουν σε άλλα βιβλία εργασίας.
Οι μακροεντολές δεν βρίσκουν όλες τις εξωτερικές αναφορές, καθώς αναζητούν μόνο τους τύπους φύλλου εργασίας.

Sub DeleteOrListLinks () Dim i As Integer If ActiveWorkbook is Nothing then Exit Sub i = MsgBox ("YES: Delete external formula reference" & Chr (13) & _ "NO: List εξωτερικές αναφορές τύπου", _ vbQuestion + vbYesNoCancel, "Delete ή λίστα εξωτερικών αναφορών τύπου ») Επιλέξτε Case i Case vb Ναι DeleteExternalFormulaReferences Case vbNo ListExternalFormulaReferences Τέλος Επιλέξτε Τέλος Υπο -Διαγραφή ExternalFormulaReferences () Dim ws As Worksheets, AWS As String, ConfirmReplace As Boolean DimWork As As Integer, Noole Sub i = MsgBox ("Επιβεβαίωση όλων των αντικαταστάσεων των εξωτερικών αναφορών τύπων με τιμές;", _ vbQuestion + vbYesNoCancel, "Μετατροπή αναφορών εξωτερικών τύπων") ConfirmReplace = False If i = vbCancel Then Exit Sub If i = vbYes then ConfirmReplace = True AWS = ActiveSheet.Name Application.ScreenUpdating = Λάθος για κάθε ws στο ActiveWorkbook.Worksheets OK = DeleteLinksInWS (ConfirmReplace, ws) Εάν δεν είναι εντάξει τότε βγείτε για τα επόμενα ws Ορίστε ws = Τίποτα Φύλλα (A WS) .Επιλέξτε Application.ScreenUpdating = True End Sub Private Function DeleteLinksInWS (ConfirmReplace As Boolean, _ ws As Worksheet) As Boolean Dim cl As Range, cFormula As String, i As Integer DeleteLinksInWS = True If ws Δεν είναι τίποτα Τότε Έξοδος από την εφαρμογή StatusBar = "Διαγραφή εξωτερικών αναφορών τύπων σε" & _ ws.Name & "…" ws.Ενεργοποίηση για κάθε cl In ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 Τότε Αν Αριστερά $ (cFormula, 1) = "=" Τότε Αν InStr (cFormula, "[")> 1 Τότε Αν Δεν Επιβεβαιώστε Αντικατάσταση Στη συνέχεια cl.Formula = cl.Value Else Application.ScreenUpdating = True cl. Επιλέξτε i = MsgBox ("Αντικατάσταση του τύπου με την τιμή;", _ vbQuestion + vbYesNoCancel, _ "Αντικατάσταση εξωτερικής αναφοράς τύπου στο" & _ cl.Address (False, False, xlA1) & _ "with the cell cell?") ​​Application.ScreenUpdating = False If i = vbCancel Then DeleteLinksInWS = False Exit Function Τερματισμός Αν Εάν i = vbΝαι Στη συνέχεια, Σφάλμα Συνέχιση Επόμενο 'σε περίπτωση που το φύλλο εργασίας προστατεύεται cl.Formula = cl. Value On Error GoTo 0 End If E nd Αν Τερματισμός Αν Τερματισμός Αν Επόμενο cl Ρύθμιση cl = Τίποτα Application.StatusBar = Λάθος Τέλος Λειτουργίας Υποκατάστασης ExternalFormulaReferences () Dim ws As Worksheet, TargetWS As Worksheet, SourceWB As Workbook If ActiveWorkbook is Nothing then Exit Sub Application.ScreenUpdating = False With ActiveWorkbook On Error Resume Next Set TargetWS = .Worksheets.Add (Before: =. Worksheets (1)) If TargetWS Is Nothing then 'the workbook is protection Set SourceWB = ActiveWorkbook Set TargetWS = Workbooks.Add.Worksheets (1) SourceWB.Activate Ορίστε SourceWB = Τίποτα δεν τελειώνει εάν με TargetWS .Range ("A1"). Formula = "Sequence" .Range ("B1"). Formula = "Cell" .Range ("C1"). Formula = "Formula" .Range ( "A1: C1"). ("A: C"). AutoFit On Error Resume Next .Name = "List link" On Error GoTo 0 End With Set TargetWS = Τίποτα 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 if ws Is nothing then Exit Sub If TargetWS Is Nothing then Exit Sub Application.StatusBar = "Εύρεση εξωτερικού αναφορές τύπου σε "& _ ws.Name &" … "Για κάθε cl In ws.UsedRange cFormula = cl.Formula If Len (cFormula)> 0 Τότε Αν Αριστερά $ (cFormula, 1) =" = "Τότε If InStr (cFormula , "[")> 1 Στη συνέχεια με 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 = "" "& c