2012-12-04 27 views
5

Ich schreibe ein Makro in Excel2003, um alle Zellen mit Formeln in einer Arbeitsmappe zu finden und ihre Adresse und Formel in ein paar Spalten auf einem anderen Blatt auszugeben.Konvertieren der Formel einer Zelle in Text mit Excel Vba

Ich weiß, dass ich die Formel für eine einzelne Zelle zeigen kann

Public Function ShowFormula(cell As Range) As String 

    ShowFormula = cell.Formula 

End Function 

verwendet, die ganz gut funktioniert, aber da ich nicht haben wollte alle Zellen von Hand zu finden, schrieb ich das folgende Makro um sie alle für mich zu finden

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 

Es findet alle Zellen nur gut, sondern die Formel als Text anzuzeigen, zeigt die Liste die Formel Ergebnisse.

Was fehlt mir, um die Formeln als Text anstelle von Formeln auszugeben?

Antwort

5

Versuchen Sie folgendes:

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

Auch diese Dinge etwas schneller machen. Statt

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

versuchen

For j = referenceRange.Parent.Index to Sheets.Count 
    Set thisSheet = Sheets(j) 
+0

Danke für den Tipp für die Dinge zu beschleunigen! Schnelle Frage zu Ihrer Antwort. Während dies funktioniert, gibt es "= A1 + B2 + C3 + ..." aus. Ich plane, diese Formeln später in andere Zellen zu stecken, und dazu muss das "'" entfernt werden. Gibt es eine Möglichkeit, dies zu tun, ohne ein Textformat zu erzwingen? Ich frage mich wirklich, warum es mit der UDF funktioniert und nicht innerhalb des Makros ...? –

+0

Entfernen des "'" ist trivial 'Richtig (s, Len (s) - 1)' aber ich nehme Ihren Punkt. Sie könnten versuchen, das Format der Zielzelle auf Text zu setzen, bevor Sie die unmodifizierte Formel einfügen und sehen, wie das geht. –

+0

Formatierung in Text hat diesen Trick gemacht. So einfach, aber es ist mir nicht eingefallen :(Vielen Dank! –

Verwandte Themen