VBA中函数的默认返回类型是什么?

rex*_*rex 1 vba function return-type

刚刚意识到我不知道答案,也没有关于SO的问题,所以在这里:

Function当没有指定VBA时,VBA中的例程的默认返回类型是什么?

z̫͋*_*z̫͋ 8

根据文档,默认返回类型是a Variant,
除了以下情况:

DefInt I

' Now Itest will be Integer by default
Function Itest
End Function

Sub Test
    Debug.Print TypeName(Itest) 'will print "Integer", remove the 1st line and you will get "Empty"
End Sub
Run Code Online (Sandbox Code Playgroud)

这是正确的,默认情况下DefInt I,所有以名称开头的名称I都是Integer.

你也可以使用DefBool,DefByte,DefCur, DefDate,DefDbl,DefInt,DefLng,DefLngLng,DefLngPtr,DefObj,DefSng,DefStr,DefVar

你甚至可以声明范围:

DefBool A-C

资源


编辑:

某些带有特殊后缀的名称也会表现不同:

Function a$()
End Function

Function b!()
End Function

Function c#()
End Function

Function d@()
End Function

Function e%()
End Function

Function f&()
End Function

Sub test()
    Debug.Print "a$ : " & TypeName(a$) ' String
    Debug.Print "b! : " & TypeName(b!) ' Single
    Debug.Print "c# : " & TypeName(c#) ' Double
    Debug.Print "d@ : " & TypeName(d@) ' Currency
    Debug.Print "e% : " & TypeName(e%) ' Integer
    Debug.Print "f& : " & TypeName(f&) ' Long
End Sub
Run Code Online (Sandbox Code Playgroud)

对于LongLong也有^,但仅适用于64位实现

文档
相关主题

  • @mehow我理解这个问题的方式,_default_是在函数定义中没有给出类型的时候.我觉得值得一提这个角落案例.值得一提的是,我没有回答你的回答 (3认同)

小智 5

如果未明确指定类型,则为Variant默认值.

从技术上讲,这是一个0反过来vbEmpty但是我们不会进一步详细讨论这个简单的问题.Variant可能会根据返回的值(如果有)更改其类型.看到这篇有趣的帖子

  • 并非总是如此,请看我的帖子 (2认同)
  • 我知道`Variant`是什么,但是当使用`Def*`关键字时,默认的返回类型不是`Variant`.尝试运行此代码:`DefInt I Sub Itest()Itest ="abc"End Sub Sub test()Itest End Sub` (2认同)