2014-05-09 37 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相比将节省转换(完全不相关的性能考虑),但在语义上等同。