【问题标题】:TypeName in Excel VBA returns what?Excel VBA 中的 TypeName 返回什么?
【发布时间】:2017-05-29 19:04:57
【问题描述】:

我想检查是什么数据类型:Cells(2, 1).Value,即“这里发生了什么?”以下。

我尝试了名称(整数/长等),但似乎不接受。

If TypeName(Cells(r, 1).Value) = "WHAT GOES HERE?"  Then
    MsgBox "Yes"

Else
    MsgBox "No"

End If

【问题讨论】:

  • 放置一个断点(F9),然后运行代码,当你到达断点时按Ctrl+G进入立即窗格,然后输入?TypeName(Cells(r,1).Value)得到你的答案。
  • 谢谢。虽然不是我想要的,但这是一个非常有用的提示!非常适合调试和双重检查!

标签: vba excel types


【解决方案1】:

看看MSDN 会发现一个可能的返回值表

String Returned     Variable
-------------------------------------------------------------------
Object type         An object whose type is objecttype
Byte                Byte value
Integer             Integer
Long                Long integer
Single              Single-precision floating-point number
Double              Double-precision floating-point number
Currency            Currency value
Decimal             Decimal value
Date                Date value
String              String
Boolean             Boolean value
Error               An error value
Empty               Uninitialized
Null                No valid data
Object              An object
Unknown             An object whose type is unknown
Nothing             Object variable that doesn't refer to an object

此外,您还可以使用内置帮助查看上表(感谢 Axel Richter)。要快速跳转到相应页面,请选择功能并按 F1 或通过对象浏览器导航到帮助页面,如下所示:

【讨论】:

  • 我给这个答案,即使另一个答案正确。我喜欢人们将用户引导至资源以获得更简单的问题,而不是给出准确的答案。谢谢。
  • @J.H 当然。直到有一天,微软决定再次重新设计他们的网络文档,然后 MSDN 链接失效,这个仅链接的答案变得毫无用处。 Stack Overflow 应该是资源。
  • 我明白 Mat's Mug 的意义——但当然更好的选择是有一种可靠的方式链接到 MSDN。我更新了答案,以便它立即反映所引用页面的全部内容,以防将来链接被破坏,但希望其他用户来到这个问题将使用 MSDN 链接获取当前信息(以防它仍然存在: ))
  • @DAXaholic:您可以进一步提到,即使链接断开,也可以将文本光标放在 VBA-Editor 中的函数名称 TypeName 内,然后按 [F1]。然后显示完全相同的信息。只要 Excel VBA 存在,这种情况就有望实现。
【解决方案2】:

如果您的单元格包含一个数字,那么可能的 TypeName 是“Double”

If TypeName(Cells(r, 1).Value) = "Double"  Then
    MsgBox "Yes"

Else
    MsgBox "No"

End If

【讨论】:

    【解决方案3】:

    快速说明:您可以尝试一下。用值填充您要检查的单元格并使用

    MsgBox TypeName(cells(2, 1).Value)
    

    如果单元格为空,则返回Empty

    【讨论】:

      【解决方案4】:

      如果你需要MSDN Table中的变量号,那么你需要VarType。 像这样:

      +===================+=======+====================================================+ | Constant | Value | Description | +===================+=======+====================================================+ | vbEmpty | 0 | Empty (uninitialized) | +-------------------+-------+----------------------------------------------------+ | vbNull | 1 | Null (no valid data) | +-------------------+-------+----------------------------------------------------+ | vbInteger | 2 | Integer | +-------------------+-------+----------------------------------------------------+ | vbLong | 3 | Long integer | +-------------------+-------+----------------------------------------------------+ | vbSingle | 4 | Single-precision floating-point number | +-------------------+-------+----------------------------------------------------+ | vbDouble | 5 | Double-precision floating-point number | +-------------------+-------+----------------------------------------------------+ | vbCurrency | 6 | Currency value | +-------------------+-------+----------------------------------------------------+ | vbDate | 7 | Date value | +-------------------+-------+----------------------------------------------------+ | vbString | 8 | String | +-------------------+-------+----------------------------------------------------+ | vbObject | 9 | Object | +-------------------+-------+----------------------------------------------------+ | vbError | 10 | Error value | +-------------------+-------+----------------------------------------------------+ | vbBoolean | 11 | Boolean value | +-------------------+-------+----------------------------------------------------+ | vbVariant | 12 | Variant (used only with arrays of variants) | +-------------------+-------+----------------------------------------------------+ | vbDataObject | 13 | A data access object | +-------------------+-------+----------------------------------------------------+ | vbDecimal | 14 | Decimal value | +-------------------+-------+----------------------------------------------------+ | vbByte | 17 | Byte value | +-------------------+-------+----------------------------------------------------+ | vbLongLong | 20 | LongLong integer (Valid on 64-bit platforms only.) | +-------------------+-------+----------------------------------------------------+ | vbUserDefinedType | 36 | Variants that contain user-defined types | +-------------------+-------+----------------------------------------------------+ | vbArray | 8192 | Array | +-------------------+-------+----------------------------------------------------+

      那么你可以简单地使用

      If VarType(TempArray) = vbObject Then 或者 If VarType(TempArray) = 9 Then

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-02
        • 2013-12-07
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 2019-07-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多