ByRef 参数类型不匹配

传递 ByRef通过引用)的参数必须(默认情况下)具有过程中预期的准确数据类型。 此错误具有以下原因和解决方法:

  • 您传递一个无法强制转换为所需类型的类型的参数。

    例如,如果您尝试在需要 Long 时传递 Integer 变量,则会出现此错误。 如果您需要进行强制转换(即使它会导致信息丢失),则可以用其自己的一对圆括号将参数括起来以传递它。

    例如,若要向需要 Integer 参数的过程传递 Variant 参数 MyVar,则可以编写如下所示的调用:

      Dim MyVar 
      MyVar = 3.1415 
      Call SomeSub((MyVar)) 
    
      Sub SomeSub (MyNum As Integer) 
      MyNum = MyNum + MyNum 
      End Sub
    

    将参数置于其自己的一对圆括号中会将其作为表达式进行强制计算。 在此计算过程中,数字的小数部分会进行舍入(不截断)以使其符合所需的参数类型。 计算的结果将置于一个临时位置,并且过程将接收对该临时位置的引用。 因此,原始 MyVar 保留其值。

    注意

    [!注释] 如果您不为变量指定类型,则变量将接收默认类型 Variant 。 此情况并不总是很明显。 例如,下面的代码声明两个变量,第一个是 MyVar,其类型为 Variant ,第二个是 AnotherVar,其类型则为 Integer

     Dim MyVar, AnotherVar As Integer 
    

有关其他信息,选择有问题的项并按 F1(在 Windows 中)或 HELP(在 Macintosh 上)。

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。