Às vezes temos planilhas tão complexas, tão cheias de fórmulas que chegam a ficar confusas para uma manutenção.
Quando precisamos revisar essas planilhas com as suas fórmulas, talvez trocando algumas referências, e/ou fazendo leves ajustes, isso pode tornar-se um verdadeiro caos. Ou pode ser que queiramos apenas imprimir as respectivas planilhas com as fórmulas.
Sim, seria muito mais fácil se simplesmente pudéssemos enxergar o conteúdo das células com as fórmulas e não com os valores que estas refletem. Mas como fazer isso?
Que tal usar a programação para termos mais detalhes sobre como os cálculos funcionam, e criarmos uma lista de todas as fórmulas em cada planilha? No código a seguir, uma nova planilha é criada para cada planilha que contém fórmulas. A nova planilha será nomeado com o prefixo "F_" seguida do nome original.
Coloque este código num módulo regular:
Sub ListAllFormulas()
'print the formulas in the active workbookDim lRow As LongDim wb As WorkbookDim ws As WorksheetDim wsNew As WorksheetDim c As RangeDim rngF As RangeDim strNew As StringDim strSh As StringOn Error Resume NextApplication.DisplayAlerts = FalseSet wb = ActiveWorkbookstrSh = "F_"For Each ws In wb.WorksheetslRow = 2If Left(ws.Name, Len(strSh)) <> strSh ThenSet rngF = NothingOn Error Resume NextSet rngF = ws.Cells.SpecialCells(xlCellTypeFormulas, 23)If Not rngF Is Nothing ThenstrNew = Left(strSh & ws.Name, 30)Worksheets(strNew).DeleteSet wsNew = Worksheets.AddWith wsNew.Name = strNew.Columns("A:E").NumberFormat = "@" 'text format.Range(.Cells(1, 1), .Cells(1, 5)).Value _= Array("ID", "Sheet", "Cell", "Formula", "Formula R1C1")For Each c In rngF.Range(.Cells(lRow, 1), .Cells(lRow, 5)).Value _= Array(lRow - 1, ws.Name, c.Address(0, 0), _c.Formula, c.FormulaR1C1)lRow = lRow + 1Next c.Rows(1).Font.Bold = True.Columns("A:E").EntireColumn.AutoFitEnd With 'wsNewSet wsNew = NothingEnd IfEnd IfNext wsApplication.DisplayAlerts = True
End Sub
Neste código as planilha de fórmulas são apagadas antes de criarmos uma nova. No entanto, se desejar excluí-las sem criar um novo conjunto, pode executar o seguinte código:
Sub ClearFormulaSheets()
' Remove formula sheetsDim wb As WorkbookDim ws As WorksheetDim strSh As StringOn Error Resume NextLet Application.DisplayAlerts = FalseSet wb = ActiveWorkbookstrSh = "F_"Set wb = ActiveWorkbookFor Each ws In wb.WorksheetsIf Left(ws.Name, Len(strSh)) = strSh Thenws.DeleteEnd IfNext wsApplication.DisplayAlerts = True
End Sub
Reference: Debra Dalgleish
Tags: VBA, Excel, formula, workbook