2014-05-09 62 views
0

下面的實施例從Excel幫助約VBA Log函數,符號number#使得number轉換成十進制數據類型,但使它成爲Log功能的任何差異,如果它需要10代替10#作爲參數?日誌()行爲和編號#符號

Static Function Log10(X) 

    Log10 = Log(X)/Log(10#) 

End Function 
+0

我認爲不應該有任何區別。你可以改用'Application.Log10()'(工作表函數) –

回答

1

爲了解釋爲什麼它沒有什麼區別,我需要解釋如何在VBA中處理類型轉換。

在VBA中,默認情況下類型嘗試是隱含轉換爲一個函數/操作所需的類型,使用基於您的系統區域設置默認的轉換(當它涉及到日期的系統區域設置位已經意義和將數字轉換爲數字類型,反之亦然)。

考慮:

Dim aNumber As Integer, aString As String 
aString = 1 & 2 
aNumber = aString 
aNumber = aString + 1 
MsgBox aNumber 

在上文中,數字1和2被隱式轉換爲字符串。由於系統區域設置在處理整型時不重要,因此aString隨後將存儲「12」。將一個字符串分配給一個數字會導致該字符串被隱式轉換爲一個數字,因此aNumber隨後是12,然後是13。調用MSGBOX在多個傳遞將導致數被轉換爲字符串之前它被傳遞英寸

隱式類型轉換像上面不能在VBA在具有Option Strict指令VB禁用,不像。

因此,對於上面的Log記錄問題,傳入的整數類型在實際傳入之前會隱含地轉換爲雙精度。傳入例如10#10相比將節省轉換(完全不相關的性能考慮),但在語義上等同。