声明固定大小的数组
有三种方法声明固定大小的数组,用哪一种方法取决于数组应有的有效范围:

建立公用数组,在模块的声明段用 Public 语句声明数组。
建立模块级数组,在模块的声明段用 Private 语句声明数组。
建立局部数组,在过程中用 Private 语句声明数组。
设定上下界
声明数组时,在数组名之后跟一个用括号括起来的上界。上界不得超过 Long 数据类型的范围(-2,147,483,648 到 2,147,483,647)。例如,下列数组声明可出现在模块的声明段:

Dim Counters (14) As Integer '15 个元素。
Dim Sums (20) As Double '21 个元素。

为建立公用数组,直接用 Public 取代 Dim。

Public Counters (14) As Integer
Public Sums (20) As Double

在过程之中同样的声明使用 Dim:

Dim Counters (14) As Integer
Dim Sums (20) As Double

第一个声明建立了一个有 15 个元素的数组,其索引号从 0 到 14 。第二个声明建立了一个有 21 个元素的数组,其索引号从 0 到 20 。缺省的下界为 0。

为了规定下界,用关键字 To 显式提供下界(为 Long 数据类型):

Dim Counters (1 To 15) As Integer
Dim Sums (100 To 120) As String

在前述声明中,Counters 的索引值范围从 1 到 15,而 Sums 的索引值范围从 100 到 200。

包含其它数组的数组
有可能建立 Variant 数据类型数组,并与不同数据类型的数组共居一处。以下代码建立两个数组,一个包含整数,而另一个包含 字符串。然后声明第三个 Variant 数组,并将整数和字符串数组放置其中:

Private Sub Command1_Click ()
Dim intX As Integer '声明计数器变量。
'声明并放置整数数组。
Dim countersA (5) As Integer
For intX = 0 To 4
countersA (intX) = 5
Next intX
'声明并放置字符串数组。
Dim countersB (5) As String
For intX = 0 To 4
countersB (intX) = “hello”
Next intX
Dim arrX (2) As Variant '声明拥有两个成员的新数组。
arrX (1) = countersA () '将其它数组移居到数组。
arrX (2) = countersB ()
MsgBox arrX (1) (2) '显示每一个数组的成员。
MsgBox arrX (2) (3)
End Sub

多维数组
有时需要追踪记录数组中的相关信息。例如,为了追踪记录计算机屏幕上的每一个像素,需要引用它的 X、Y 坐标。这时应该用多维数组存储值。

可用 Visual Basic 声明多维数组。例如,下面的语句声明了一个过程内的 10 × 10 的二维数组。

Static MatrixA (9, 9) As Double

可用显式下界来声明两个维数或两个维数中的任何一个:

Static MatrixA (1 To 10, 1 To 10) As Double

可以将所有这些推广到二维以上的数组。例如:

Dim MultiD (3, 1 To 10, 1 To 15)

这个声明建立了三维数组,大小为 4 × 10 × 15。元素总数为三个维数的乘积,为 600。

注意 在增加数组的维数时,数组所占的存储空间会大幅度增加,所以要慎用多维数组。使用 Variant 数组时更要格外小心,因为他们需要更大的存储空间。
用循环操作数组
可以用 For 循环嵌套有效的处理多维数组。例如,在 MatrixA 中基于每个元素在数组中的位置为其赋值:

Dim I As Integer, J As Integer
Static MatrixA(1 To 10, 1 To 10) As Double
For I = 1 To 10
For J = 1 To 10
MatrixA (I, J) = I * 10 + J
Next J
Next I

要创建动态数组,请按照以下步骤执行:

(如果希望数组为公用数组,则)用 Public 语句声明数组,或者,(如果希望数组为模块级,则)在模块级用 Dim 语句声明数组,或者(如果希望数组为局部数组,则)在过程中用 Static 或 Dim 语句声明数组。给数组附以一个空维数表,这样就将数组声明为动态数组。
Dim DynArray ()

用 ReDim 语句分配实际的元素个数。
ReDim DynArray (X + 1)

ReDim 语句只能出现在过程中。与 Dim 语句、Static 语句不同,ReDim 语句是一个可执行语句,由于这一语句,应用程序在运行时执行一个操作。

ReDim 语句支持这样的语法,它与固定数组中使用的语法相同。对于每一维数,每个 ReDim 语句都能改变元素数目以及上下界。但是,数组的维数不能改变。

ReDim DynArray (4 to 12)

例如,用第一次声明在模块级所建立的动态数组 Matrix1:

Dim Matrix1 () As Integer

然后,在过程中给数组分配空间:

Sub CalcValuesNow ()
.
.
.
ReDim Matrix1 (19, 29)
End Sub

这里的 ReDim 语句给 Matrix 分配一个 20 × 30 的整数矩阵(元素总大小为 600)。还有一个办法,用变量设置动态数组的边界:

ReDim Matrix1 (X, Y)

注意 您可以将字符串赋值给大小可变的字节数组。一个字节数组也可以被赋值给一个可变长的字符串。一定要注意字符串中的字节数会随平台而变化。同一个字符串在 Unicode 平台上的字节数是它在非 Unicode 平台上的两倍。

保留动态数组的内容
每次执行 ReDim 语句时,当前存储在数组中的值都会全部丢失。Visual Basi 重新将数组元素的值置为 Empty(对 Variant 数组)、置为 0(对 Numeric 数组)、置为 零长度字符串(对 String 数组)或者置为 Nothing(对于对象的数组)。

在为新数据准备数组,或者要缩减数组大小以节省内存时,这样做是非常有用的。有时希望改变数组大小又不丢失数组中的数据。使用具有 Preserve 关键字的 ReDim 语句就可做到这点。例如,使用 UBound 函数引用上界,使数组扩大、增加一个元素,而现有元素的值并未丢失:

ReDim Preserve DynArray (UBound (DynArray) + 1)

在用 Preserve 关键字时,只能改变多维数组中最后一维的上界;如果改变了其它维或最后一维的下界,那么运行时就会出错。 所以可这样编程:

ReDim Preserve Matrix (10, UBound (Matrix, 2) + 1)

而不可这样编程:

ReDim Preserve Matrix (UBound (Matrix, 1) + 1, 10)

VB中如何声明及使用多维数组,多层数组及动态数组相关推荐

  1. c++删除数组中重复元素_在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法...

    大家好,我们今日继续讲解VBA数组与字典解决方案第22讲:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法.如果文本中含有大量的重复值,此时,如果我们要剔除重复值,该怎么办?用VBA的方法 ...

  2. C语言中的数据类型在VB中的申明

    C中的数据类型在VB中的声明 ATOM                                   ByVal variable As Integer             结果为  Int ...

  3. vb调用本地html,在VB中调用HTMLHELP文件VB -电脑资料

    在 VB 中调用HTMLHELP文件 湖北省襄樊市劳动保险处 闫东 ---- HTML帮助文件是 WINDOWS 基本帮助系统的一种新标准,在WINDOWS 98中我们到处都可以看到它的身影, 在VB ...

  4. java 动态二维数组_Java数组、动态数组、二维数组的应用

    一.认识数组 1.容器的概念 ​用于存储数据的一块内存称为容器,生活中有很多容器,例如水杯,衣柜,以及存放"东西" ​存放在容器中的数据,称为"元素" 2.为什 ...

  5. [unreal4入门系列之十五] UE4中的动态数组:TArray容器

    为什么使用UE4提供的容器类? 如果你用过C++的STL库,你就知道STL提供了各种各样的容器/数据结构,使得你对处理很多数据的时候非常快捷高效.UE4同样也提供了类似的库,库里面的类型是以T开头的, ...

  6. python去除数组缺失值_动态数组的应用,VBA中如何利用动态数组去除重复值的第二讲...

    大家好,我们今日继续讲解VBA代码解决方案的第62讲内容:在VBA中如何使用动态数组,以及利用动态数组去除重复值的方法第二部分.在上一讲中,我们讲了知识点的利用,其一是Filter函数,其二是ReDi ...

  7. c语言中动态数组的实现

    在数组一章中,曾介绍过数组的长度是预先定义好的,在整个程序中固定不变.C语言中不允许动态数组类型.例如: int n;scanf("%d",&n);int a[n];用变量 ...

  8. C语言中动态数组的分配

    很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的方法来解决,但是现在发现这是一个相当不好的习惯,甚至可能导致编写的程序出现一些致命的错误. 尤其对于搞嵌入式的人来说,嵌入 ...

  9. VB中实现IObjectSafety接口以声明控件安全的方法

    VB中实现IObjectSafety接口以声明控件安全的方法 转载自:http://www.cnblogs.com/Shana/archive/2009/06/24/VB_Iobjsafe.html ...

  10. 在VB 中调用动态连接库

    在VB 中调用动态连接库   2001-11-08· · ··yesky 1 2 3 4 5 6 7 8  下一页 作为一种简单易用的Windows开发环境,Visual Basic从一推出就受到了广 ...

最新文章

  1. 【神经网络】(4) 卷积神经网络(CNN),自定义网络,案例:彩色图像10分类
  2. ajax invoke error,配置全局的异常捕获时,走ajax请求下面报错
  3. s10 linpus linux,上月国外最受关注NB排行 超便携本占优
  4. ibatis中如何调用出参为游标的存储过程
  5. python 函数复习
  6. 软件工程课堂作业——寻找“水王”
  7. STM32安装Keil5、芯片支持包、startup启动文件(启动过程分析)、建立工程、烧写
  8. HDU5248:序列变换(二分)
  9. JavaScript缓存处理代码
  10. uni-app的列表搜索框_微信怎么搜索小程序?小程序能有什么用?
  11. 2007年8月25日华为的几个面试题
  12. RAX,eax,ax,ah,al 关系
  13. 沐雪微信平台---企业微信营销专家
  14. 问题解决:Deepin-TIM版本太低无法登录
  15. Java毕业设计_基于javaee创新创业实验室管理系统
  16. 85.You want to configure and schedule offline database backups to run automatically. Which tool or u
  17. 20世纪中文小说100强
  18. BugKu -- 程序员本地网站
  19. 地震波ifft matlab,地震波观测系统的MATLAB仿真报告.doc
  20. Jdk(1.8)下载和安装

热门文章

  1. 代码实现堆溢出、栈溢出、永久代溢出、直接内存溢出
  2. APP创意IDEA记录
  3. .NET软件授权管理解决方案Eziriz .NET IntelliLock控件详细介绍
  4. 专访递归神经网络之父:AI下一轮革命核心是“人工好奇心”
  5. 山洋服务器R系列和Q系列区别,仔细分析:aoc u系列和q系列有区别吗?说说哪个好?大家看法如何...
  6. 张恭庆院士:数学的意义(最全面的解释)
  7. 用java语言编写选课系统_求用JAVA为我写一个简单的选课系统程序,实现增,删,改,查功能...
  8. uniapp 微信小程序 map获取接口数据后地图标注marker不会渲染显示
  9. python开发板卡驱动开发_树莓派开发板如何驱动LED灯
  10. Rdt2.1 和 Rdt2.2的详细解释