设为首页收藏本站

EPS数据狗论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1497|回复: 0

[VBA] VBA数组中的常见错误

[复制链接]

22

主题

197

金钱

309

积分

入门用户

发表于 2019-3-1 14:57:15 | 显示全部楼层 |阅读模式

使用数组时,出错是很容易的。如果你试图给数组赋予比声明数组时更多的成员的话,VBA就会显示错误信息“下标越界”。
2.png
假设你声明了一个包含6个成员的一维数组,而你却试图给第八个成员赋值,当你运行该过程时,VB无法找到第八个成员,所以显示错误信息。点击调试按钮,VB将导致错误的代码行(见下图)加亮。检查数组的声明语句,并且更改被加亮代码行括号里的索引号。“下标越界”错误经常是由使用循环的过程引发的。下面的过程Zoo1就是这种情况的一个例子。在用户取消在输入框里输入数据之前,循环里的语句反复被执行。在执行该过程时,当变量 i 等于4的时候,VB无法在这个只有三个成员的数组里找到第四个成员,那么错误信息就出现了。修改后的过程Zoo2示范了前面章节里介绍的LBound和UBound函数如何能够避免试图访问不存在的数组成员的错误。
201611240924543007.png
1.在当前工程里插入新模块,命名为Errors_In_Arrays
2.输入下列过程Zoo1和Zoo2:
  1. Sub Zoo1()
  2. 'this procedure triggers an error "Subscript out of range" 本过程引发“下标越界”错

  3. Dim zoo(3) As String
  4. Dim i As Integer
  5. Dim response As String
  6. i = 0
  7. Do
  8. i = i +1
  9. response = InputBox("Enter a name of animal:")
  10. zoo(i) = response
  11. Loop until response = ""
  12. End Sub
  13. Sub Zoo2()
  14. 'this procedure avoids the error "Subscript out of range"本过程避免“下标越界”错误
  15. Dim zoo(3) As String
  16. Dim i As Integer
  17. Dim response As String
  18. i = 1
  19. Do While i>=LBound(zoo) And i <=UBound(zoo)
  20. response = InputBox("Enter a name of animal:")
  21. If response = "" Then Exit Sub
  22. zoo(i) = response
  23. i = i + 1
  24. Loop
  25. For i = LBound(zoo) To UBound(zoo)
  26. MsgBox zoo(i)
  27. Next
  28. End Sub
复制代码

另外一个使用数组时经常碰到的错误是类型不匹配。要避免这类错误,就要牢记一个数组的每个成员都必须具有相同的数据类型。如果你试图给数组成员赋予和数组声明的数据类型矛盾的数据的话,你就将在执行代码时收到“类型不匹配”的错误。要让一个数组出错不同类型的数据类型的话,你就得声明数组为Variant类型。
数组作为参数
数据可以在子过程或者函数过程之间作为必须或者可选参数传递。如果传递的参数不是过程执行一定要的话,那么这个参数名称就应该在前面加关键字Optional。然而,有些时候,你事先并不知道你要传递多少个参数。一个典型的例子就是加法。你可能想要将两个数字加和,或者,你也许要加和3个,10个,或者15个数字。使用关键字ParamArray,你就可以将一个包含任意个成员的数组传递给你的子过程和函数过程。下面的函数过程AddMultipleArgs将加和你所需要的任何多个数字。该函数以数组myNumbers的声明开始,注意关键字ParamArray的使用。该数组必须声明为Variant类型,并且它必须是函数过程的最后一个参数。
1.在当前工程里插入一新模块,命名为ParameterArrays
2.输入如下函数过程AddMultipleArgs:
  1. Function AddMultipleArgs(ParamArray myNumbers() As Variant)
  2. Dim mySum As Single
  3. Dim myValue As Variant
  4. For each myValue in myNumbers
  5. mySum=mySum+myValue
  6. Next
  7. AddMultipleArgs = mySum
  8. End Function
复制代码

3.  激活立即窗口来试验上面的函数,在立即窗口里输入指令:
  1. ?AddMultipleArgs(1, 23.24, 3, 24, 8, 34)
复制代码

当你按下回车键,VB就会返回上面参数的总和:93.24。你可以提供无限制的参数数目。注意,每个函数的参数之间要用逗号分开。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

客服中心
关闭
在线时间:
周一~周五
8:30-17:30
QQ群:
653541906
联系电话:
010-85786021-8017
在线咨询
客服中心

意见反馈|网站地图|手机版|小黑屋|EPS数据狗论坛 ( 京ICP备09019565号-3 )   

Powered by BFIT! X3.4

© 2008-2028 BFIT Inc.

快速回复 返回顶部 返回列表