您的位置:首页 > 编程语言 > VB

vba传递参数类型错误

2015-01-21 15:37 344 查看
先来看看微软官方的说明:

目录内容



概要




解决方案




详细信息




重现问题的步骤


<style>.tocTitle, #tocDiv{display: none;}</style>

概要

在 Excel 中,当过程的 Microsoft Visual Basic for Applications 将传递一个数组的值给另一个数组,如果两个数组的数据类型不兼容,您可能会收到以下错误消息之一:

类型不匹配: 数组或用户定义类型预期。

-或者-

编译错误:
类型不匹配: 数组或预期的用户定义类型

这些错误消息是不清楚。更准确的错误消息是如下:

类型不匹配: 不兼容的类型的数组



回到顶端


解决方案

要确保两个数组的数据类型是兼容的具有相同的数据类型这两个数组的尺寸。


回到顶端


更多信息

重现问题的步骤

在 Microsoft Excel 中创建一个新工作簿。

从插入菜单中,选择宏,然后选择模块。

在 Microsoft Excel 97 中,请按 ALT + F11 来激活 Visual Basic 编辑器中。然后,在插入菜单中单击模块。

在模块中键入以下过程:

Sub First()
Dim A(1 to 20) As Double
Second A()
End Sub

Sub Second(B() As Single)
End Sub


从工具菜单中,选择宏。选择首先,名为的宏,然后选择运行。

在 Microsoft Excel 97 中,请单击工具菜单上的宏。首先,单击然后单击运行。

此时,您应该收到上述错误消息之一。

正确的语法是有兼容两个数组的数据类型。例如,键入下面的过程与上面的示例相同的模块工作表上。

Sub Correct()
Dim A(1 to 20) As Double
Example A()
End Sub

Sub Example(B() As Double)
End Sub


注: 数据类型,两个数组是Double.


回到顶端

出处:http://support.microsoft.com/kb/121114/

=============================================================

下面再看看网上其他人的解释,及解决方法

'简单的测试程序
Private Sub Form_Load()
Dim ii As Integer
Dim ba(), bb() As Byte
ReDim ba(9)
ReDim bb(9)
For ii = 0 To 9
ba(ii) = 3 * ii + 2
Next
Call ttsub(ba(), bb())
End Sub

Private Sub ttsub(a() As Byte, b() As Byte)
Dim aa As Byte
For aa = 0 To 9
b(aa) = a(aa) + 1
Next
End Sub

调试时提示下述错误:
compile error:
type mismatch: array or user-defined type expected

错误指向Call ttsub(ba(), bb())一句中的ba()
请问这段程序哪儿错了?该怎么改?

解决方法:

Dim ba(), bb() As Byte
这个是错误的.要写就写全,因为vb默认是变体Variant类型的.
所以千万不能马虎,得写Dim ba() As Byte, bb() As Byte

提问者评价:原来是这样,感谢!
出处:http://zhidao.baidu.com/link?url=nF7Dig7c3aSIY5LbYoZ4oG-dGEUG1sHeWB3wS8rabMAmtAJHcH0L5r_o6nsJ-23Pv4LrMjxA9r_Ago0k6RLtxK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐