Public WS_FormulaLinkSheet$, TFormulaLinkSheet As Date
Sub FindFormulaLinkSheet()
Call ClearFMC_FormulaLinkSheet
Dim WS As Worksheet, R, tmp$, Rng As Range, tRng As Range, i As Boolean
Dim RegExp As Object
Set RegExp = CreateObject("VbScript.RegExp")
Set WS = ActiveSheet
On Error Resume Next
Set Rng = WS.Cells.SpecialCells(xlCellTypeFormulas)
If Rng Is Nothing Then Exit Sub
For Each R In Rng
tmp = R.Formula: GoSub Test
If i Then
If tRng Is Nothing Then
Set tRng = R
Else
Set tRng = Union(R, tRng)
End If
End If
Next
If Not tRng Is Nothing Then
With tRng
.FormatConditions.Add _
Type:=xlExpression, _
Formula1:="=True"
With .FormatConditions(.FormatConditions.Count)
.SetFirstPriority
With .Interior
.Color = vbYellow
End With
.StopIfTrue = True
.Font.Color = vbBlack
End With
End With
End If
Set RegExp = Nothing
WS_FormulaLinkSheet = WS.Name
TFormulaLinkSheet = Now + TimeSerial(0, 0, 15)
Application.OnTime TFormulaLinkSheet, "ClearFMC_FormulaLinkSheet", , True
ActiveWindow.DisplayFormulas = True 'Bam Ctrl + ` de tro lai'
Exit Sub
Test:
i = False
With RegExp
.Global = True
.IgnoreCase = True
.Pattern = "(\[.{2,200}\])?\'?.{2,200}\'?\!{1}\$?\w{1,3}\$?\d{1,7}(\:\$?\w{1,3}\$?\d{1,7})?"
i = .Test(tmp)
End With
Return
End Sub
Sub ClearFMC_FormulaLinkSheet()
ActiveWindow.DisplayFormulas = False
Dim WS As Worksheet, R, tmp$, Rng As Range, tRng As Range, i As Boolean
On Error Resume Next
Application.OnTime TFormulaLinkSheet, "ClearFMC_FormulaLinkSheet", , False
Set WS = ThisWorkbook.Worksheets(WS_FormulaLinkSheet)
If WS Is Nothing Then Set WS = ActiveSheet
Set Rng = WS.Cells.SpecialCells(xlCellTypeAllFormatConditions)
If Rng Is Nothing Then Exit Sub
For Each R In Rng.FormatConditions
If R.Formula = "=True" Then R.Delete
Next
WS_FormulaLinkSheet = ""
End Sub