下面的VBA宏不能錄制,因為它使用了必須手工輸入的編程概念。該宏創建了一個活動工作表上的所有公式列表。列表保存在新的工作表中。
Sub ListFormulas()
Dim InputRange As Range
Dim OutputSheet As Worksheet
Dim OutputRow As Long
Dim Cell As Range
‘ Create a range objects
Set InputRange = ActiveSheet.UsedRange
‘ Add a new sheet
Set OutputSheet = Worksheets.Add
‘ Variable for the output row
OutputRow = 1
‘ Loop through the range
For Each Cell In InputRange
If Cell.HasFormula Then
OutputSheet.Cells(OutputRow, 1) = "’" & Cell.Address
OutputSheet.Cells(OutputRow, 2) = "’" & Cell.Formula
OutputRow = OutputRow + 1
End If
Next Cell
End Sub
雖然這個宏看似很復雜,但把它拆開來看其實是很簡單的。
首先,宏創建了一個名為InputRange的對象變量。該變量對應于活動工作表上已使用的區域(因此不必檢查每個單元格)。然后添加一張新的工作表并賦予工作表一個名為OutputSheet的對象變量。OutputRow變量設為1。該變量將在稍后增加。
For-Next循環檢查InputRange中的每個單元格。如果單元格有一個公式,接著單元格的地址和公式被寫入OutputSheet中。OutputRow變量也將增加。
當宏運行時,本例就可以了,但實際上它并不完美。它不夠靈活,也不能處理任何錯誤。例如,如果工作簿結構是受保護的,試圖添加一張新表將導致一個錯誤。