2012-12-04 243 views
5

我在Excel2003中編寫了一個宏來查找工作簿中的所有帶有公式的單元格,並在不同的工作表的幾列中輸出其地址和公式。使用excel將單元格的公式轉換爲文本vba

我知道我可以顯示公式使用

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 

它發現得很好,但所有的細胞,而不是顯示公式爲文本,列表顯示該公式的結果。

我錯過了什麼輸出公式作爲文本而不是公式?

回答

5

試試這個:

.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) 
+0

謝謝你的提示超速的事情了!快速回答您的問題。在這種情況下,它輸出''= A1 + B2 + C3 + ...'。我打算在晚些時候將這些公式重新插入到不同的單元格中,這將需要刪除「'」。有沒有辦法做到這一點,而不強制文本格式?我真的很想知道爲什麼它可以和UDF一起使用,而不是在宏觀中...? –

+0

刪除「'」並不重要,「Right(s,Len(s) - 1)',但我明白你的意思。在粘貼未修改的公式之前,您可以嘗試將目標單元格的格式設置爲文本,然後查看結果如何。 –

+0

格式化爲文本做到了這一點。這麼簡單,但它並沒有發生在我身上:(非常感謝! –

相關問題