Преобразование формулы ячейки в текст с помощью excel vba

Я пишу макрос в Excel2003, чтобы найти все ячейки с формулами в книге и вывести их адрес и формулу в нескольких столбцах на другом листе.

Я знаю, что могу показать формулу для отдельной ячейки, используя

Public Function ShowFormula(cell As Range) As String

    ShowFormula = cell.Formula

End Function

который работает нормально, но поскольку я не хотел искать все ячейки вручную, я написал следующий макрос, чтобы найти их все для себя

Sub Macro2()


Dim i As Integer
Dim targetCells As Range
Dim cell As Range
Dim referenceRange As Range
Dim thisSheet As Worksheet

Set referenceRange = ActiveSheet.Range("CA1")

With referenceRange
    For Each thisSheet In ThisWorkbook.Sheets
        If thisSheet.Index >= referenceRange.Parent.Index Then
            Set targetCells = thisSheet.Cells.SpecialCells(xlCellTypeFormulas, 23)
            For Each cell In targetCells
                If cell.HasFormula Then
                    .Offset(i, 0).Value = thisSheet.Name
                    .Offset(i, 1).Value = cell.Address
                    .Offset(i, 2).Value = CStr(cell.Formula)
                    i = i + 1
                End If
            Next
        End If
    Next
End With

End Sub

Он отлично находит все ячейки, но вместо отображения формулы в виде текста в списке отображаются результаты формулы.

Что мне не хватает для вывода формул в виде текста, а не формул?


person yu_ominae    schedule 04.12.2012    source источник


Ответы (1)


Попробуй это:

.Offset(i, 2).Value = "'" & CStr(cell.Formula)

Кроме того, это немного ускорит работу. Вместо

For Each thisSheet In ThisWorkbook.Sheets
    If thisSheet.Index >= referenceRange.Parent.Index Then

пытаться

For j = referenceRange.Parent.Index to Sheets.Count
    Set thisSheet = Sheets(j)
person Dale M    schedule 04.12.2012
comment
Спасибо за совет за то, что ускорили процесс! Быстрый вопрос на ваш ответ. Пока это работает, он выводит '=A1+B2+C3+.... Я планирую позже вставить эти формулы обратно в другие ячейки, и для этого потребуется удалить расширение '. Есть ли способ сделать это без принудительного использования текстового формата? Мне действительно интересно, почему он работает с UDF, а не внутри макроса ...? - person yu_ominae; 04.12.2012
comment
Удаление 'тривиально Right(s, Len(s) - 1), но я понимаю вашу точку зрения. Вы можете попробовать установить формат целевой ячейки на Текст перед вставкой неизмененной формулы и посмотреть, как это пойдет. - person Dale M; 04.12.2012
comment
Форматирование в текст сделало то же самое. Так просто, но мне это не пришло в голову :( Большое спасибо! - person yu_ominae; 04.12.2012