2012-12-04 37 views
5

Tôi đang viết macro trong Excel2003 để tìm tất cả các ô có công thức trong sổ làm việc và xuất địa chỉ và công thức của chúng trong một vài cột trên một trang tính khác.Chuyển đổi công thức của ô thành văn bản bằng cách sử dụng excel vba

Tôi biết tôi có thể hiển thị các công thức cho một tế bào riêng lẻ sử dụng

Public Function ShowFormula(cell As Range) As String 

    ShowFormula = cell.Formula 

End Function 

mà làm việc tốt, nhưng vì tôi không muốn có để tìm tất cả các tế bào bằng tay, tôi đã viết macro sau để tìm tất cả chúng cho tôi

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 

Tìm tất cả các ô, nhưng thay vì hiển thị công thức dưới dạng văn bản, danh sách sẽ hiển thị kết quả công thức.

Tôi thiếu gì để xuất công thức dưới dạng văn bản thay vì công thức?

Trả lời

5

Hãy thử điều này:

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

Ngoài ra, điều này sẽ làm cho mọi việc một chút nhanh hơn. Thay vì

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

thử

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

Thanks for the tip để tăng tốc mọi thứ! Câu hỏi nhanh về câu trả lời của bạn. Trong khi nó hoạt động, nó xuất ra ''= A1 + B2 + C3 + ...'. Tôi đang lên kế hoạch cắm các công thức đó vào các ô khác nhau sau và điều này sẽ yêu cầu xóa "" ". Có cách nào để thực hiện điều này mà không cần phải định dạng văn bản không? Tôi thực sự tự hỏi tại sao nó hoạt động với UDF chứ không phải trong macro ...? –

+0

Xóa "" "là tầm thường' Phải (s, Len (s) - 1) 'nhưng tôi lấy ý kiến ​​của bạn. Bạn có thể thử đặt định dạng ô đích thành Văn bản trước khi dán công thức chưa sửa đổi và xem cách thức hoạt động. –

+0

Định dạng văn bản đã làm điều đó. Rất đơn giản, nhưng nó không xảy ra với tôi :(Rất cám ơn! –

Các vấn đề liên quan