Với các macro bên dưới, bạn có thể tìm và xóa công thức trong các ô tham chiếu đến các sổ làm việc khác.

Các macro không tìm thấy tất cả các tham chiếu bên ngoài vì chúng chỉ tìm trong các công thức trang tính.

Dim i As Integer

If ActiveWorkbook Is Nothing Then Exit Sub

i = MsgBox("YES: Delete external formula references" & Chr(13) & _

"NO: List external formula references", _

vbQuestion + vbYesNoCancel, "Delete or list external formula references")

Select 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, OK As Boolean

If ActiveWorkbook Is Nothing Then Exit Sub

i = MsgBox("Confirm all replacements of external formula references with values?", _

vbQuestion + vbYesNoCancel, "Convert external formula references")

ConfirmReplace = False

If i = vbCancel Then Exit Sub

If i = vbYes Then ConfirmReplace = True

AWS = ActiveSheet.Name

Application.ScreenUpdating = False

For Each ws In ActiveWorkbook.Worksheets

If Not OK Then Exit For

Next ws

Set ws = Nothing

Sheets(AWS).Select

Application.ScreenUpdating = True

End Sub

ws As Worksheet) As Boolean

Dim cl As Range, cFormula As String, i As Integer

If ws Is Nothing Then Exit Function

Application.StatusBar = "Deleting external formula references in " & _

ws.Name & "..."

ws.Activate

For Each cl In ws.UsedRange

cFormula = cl.Formula

If Len(cFormula) > 0 Then

If Left$(cFormula, 1) = "=" Then

If InStr(cFormula, "[") > 1 Then

If Not ConfirmReplace Then

cl.Formula = cl.Value

Else

Application.ScreenUpdating = True

cl.Select

i = MsgBox("Replace the formula with the value?", _

vbQuestion + vbYesNoCancel, _

"Replace external formula reference in " & _

cl.Address(False, False, xlA1) & _

" with the cell value?")

Application.ScreenUpdating = False

If i = vbCancel Then

Exit Function

End If

If i = vbYes Then

On Error Resume Next

' in case the worksheet is protected

cl.Formula = cl.Value

On Error GoTo 0

End If

End If

End If

End If

End If

Next cl

Set cl = Nothing

Application.StatusBar = False

End Function

Sub ListExternalFormulaReferences()

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 protected

Set SourceWB = ActiveWorkbook

Set TargetWS = Workbooks.Add.Worksheets(1)

SourceWB.Activate

Set SourceWB = Nothing

End If

With TargetWS

.Range("A1").Formula = "Sequence"

.Range("B1").Formula = "Cell"

.Range("C1").Formula = "Formula"

.Range("A1:C1").Font.Bold = True

End With

For Each ws In .Worksheets

If Not ws Is TargetWS Then

End If

Next ws

Set ws = Nothing

End With

With TargetWS

.Parent.Activate

.Activate

.Columns("A:C").AutoFit

On Error Resume Next

On Error GoTo 0

End With

Set TargetWS = Nothing

Application.ScreenUpdating = True

End Sub

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 = "Finding external formula references in " & _

ws.Name & "..."

For Each cl In ws.UsedRange

cFormula = cl.Formula

If Len(cFormula) > 0 Then

If Left$(cFormula, 1) = "=" Then

If InStr(cFormula, "[") > 1 Then

With 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