2012-12-04 32 views
5

Piszę makro w programie Excel2003, aby znaleźć wszystkie komórki z formułami w skoroszycie i wyświetlając ich adres i formułę w kilku kolumnach na innym arkuszu.Konwertowanie formuły komórki na tekst za pomocą programu excel vba

wiem, że mogę pokazać wzór dla pojedynczej komórki przy użyciu

Public Function ShowFormula(cell As Range) As String 

    ShowFormula = cell.Formula 

End Function 

który działa dobrze, ale ponieważ nie chciałem aby znaleźć wszystkie komórki ręcznie, napisałem następujące makro znaleźć je wszystkie dla mnie

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 

Okazuje wszystkie komórki w porządku, ale zamiast wyświetlania formułę jako tekst, lista wyświetla wyniki formuły.

Czego brakuje mi do wyprowadzania formuł jako tekstu zamiast formuł?

Odpowiedz

5

Spróbuj tego:

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

Ponadto, będzie to uczynić rzeczy nieco szybciej. Zamiast

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

spróbować

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

Dzięki za cynk dla przyspieszenia rzeczy! Szybkie pytanie dotyczące twojej odpowiedzi. Podczas gdy to działa, wyprowadza ''= A1 + B2 + C3 + ...". Mam zamiar podłączyć te formuły z powrotem do różnych komórek później i będzie to wymagało usunięcia "" ". Czy istnieje sposób, aby to zrobić bez wymuszania formatu tekstowego? Naprawdę zastanawiam się, dlaczego działa z UDF, a nie w makro ...? –

+0

Usunięcie "" "jest trywialne" Prawo (s, Len (s) - 1) ", ale rozumiem. Możesz spróbować ustawić format docelowej komórki na Tekst przed wklejeniem niezmodyfikowanej formuły i zobaczyć, jak to działa. –

+0

Formatowanie do tekstu spowodowało tę sztuczkę. Tak prosty, a jednak nie przyszło mi to do głowy :(Wielkie dzięki! –

Powiązane problemy