此函數用於計算閉合遍歷的面積。當作爲一個子書寫並分配給特定的單元格時,該子作品完美無缺。但是,當作爲函數使用時(如下所示),它只返回零。爲什麼? 「功能設計,以適應任何數量的橫向兩側Excel中的UDF VBA編輯器僅在需要Double時返回零點
Public Function TraverseArea() As Double
Dim Area As Double
Area = 0
Range("N2").Select
Area = (ActiveCell.Value * (Range("M2").End(xlDown).Offset(-1, 0).Value - ActiveCell.Offset(1, -1).Value))
ActiveCell.Offset(1, 0).Select
While ActiveCell.Offset(1, -1) <> ""
Area = Area + (ActiveCell.Value * (ActiveCell.Offset(-1, -1).Value - ActiveCell.Offset(1, -1).Value))
ActiveCell.Offset(1, 0).Select
Wend
If Area < 0 Then
Area = Area * -1
End If
Area = Area/2
TraverseArea = Area
End Function
爲什麼選擇單元格並在函數中使用activecell?從我所看到的您不需要選擇這些單元格,您可以在不選擇它的情況下閱讀單元格內容。 –
我使用activecell的方式是從上到下逐步瀏覽Northings和Eastings列表直到結束(可以是任意數量的單元格)。你絕對沒有必要選擇每個單元格,但是,這仍然不能解釋爲什麼函數只返回零而不是計算區域。 – Jon
停下來,逐行逐行(VBE中的F8),並在代碼運行時留意AREA。我建議在調用函數時移除activecell並傳入單元格引用。如果你選擇在運行時傳入活動單元,那就這樣吧,但它比將函數鎖定到單元引用好得多。此外,我會將While循環更改爲next,循環範圍而不是查找空白,這樣您可以引用範圍而不需要偏移。 –