-2
我想實現記錄器的Excel,WONT登錄用戶更改爲單元格值(誰在乎...)。如何在Excel中實現記錄器?
但我的應用程序的內部動態。
所以:
- 它必須是基於紙張。 (原因用戶無法記住 附加奇怪的位置的一些奇怪的文件...)
- 它必須很容易出類拔萃。 (Excel是在簡單的分析相當不錯,對吧? 我不想寫任何解析器日誌。只需使用內置的Excel 功能)
- 它必須是彈性的,當我有時會 日誌產生額外的信息,有時候這些會變,有時候 陣列,物體等
問:如何處理3)? ParamArray將輸入數組視爲單個元素。在使用數組/集合時,需要在登錄時將標量值預處理爲一個項目數組/集合。
這是到目前爲止我的代碼:
Public Sub Log(level As LoggerSeverityLevel, functionName As String, message As String, Optional Arguments As Variant)
Dim sh As Object
Set sh = ActiveSheet
LoggerDB.Activate
''' Find blank row for next entry
Dim firstEmptyRow As LongLong
firstEmptyRow = Range("A" & rows.count).End(xlUp).row + 1
''' Parse level into human redable format
Dim lvlMessage As String
lvlMessage = "Unknown"
If level = lslInfo Then lvlMessage = "Info"
If level = lslWarning Then lvlMessage = "Warning"
If level = lslDebug Then lvlMessage = "Debug"
If level = lslCritical Then lvlMessage = "Critical"
''' Insert data
LoggerDB.Cells(firstEmptyRow, 1) = Now()
LoggerDB.Cells(firstEmptyRow, 2) = lvlMessage
LoggerDB.Cells(firstEmptyRow, 3) = functionName
LoggerDB.Cells(firstEmptyRow, 4) = message
''' And optional arguments, one cell per argument
Dim i As Long
Dim arg As Variant
i = 4
For Each arg In Arguments
LoggerDB.Cells(firstEmptyRow, i) = CStr(arg)
i = i + 1
Next arg
sh.Activate
End Sub
嗯什麼? ;)想快速閱讀[** Optional Parameters and ParamArrays **](http://vba4all.wordpress.com/2014/04/25/optional-parameters-and-paramarray-in-vba/)? –
不錯。但這並不能解釋我的一個重要用例。我有時會得到數組,並且需要將它傳遞給日誌函數。那麼如何處理呢? AFAIK它被存爲ParamArrays(0)元素。但如何處理?我錯過了可以接受的機制,沒有任何東西,價值,價值觀,價值觀數組(或者更確切地說,每一個都可以迭代...)。 –
你會迭代ParamArray中的每個元素,並可能在'Select Case'語句中使用'TypeName(* paramter *)'來計算出你正在處理的數據類型。 –