VB.Net中数组都是0下标开始, 无法直接声明1小标的数组了,相信这是我们很多同学从VBA过渡到VB.NET第一个大难关, 特别是很多历史VBA代码转换的时候, 会花费很多的时间,针对这个问题,我给大家提供了更便捷的解决方案,可以在VB.NET中继续使用1小标的二维数组,原来的VBA代码非零下标数组可直接移植使用!
小目标
学会VBA数组到VB.NET数组的转换方式
视频讲解
VB.NET中Dim数组和Redim数组
原来VBA的定义方式
Dim arr(1 to 10,1 to 2)
直接复制到VB.NET中会出错 要改为0下标的定义
Dim arr(9,1) ‘默认为0小标 无法再指定下标
注意Excel单元格区域读取的数组依然是1下标开始
注意虽然VB.NET默认数组下标为0,但是单元格区域得到的数组比较特殊
arr=range("A1:A10").value
注意这里的arr依然是从1下标开始的
如何继续在VB.NET中使用1小标的数组
现在借助Excel880VSTO框架的能力 我们可以继续使用1小标的二维数组
定义方式改为
‘VBA中Dim arr(1 to 10,1 to 2) 在VB.NET中如下定义即可
Dim arr(,)=DimArray(1,10,1,2)
如果需要重定义 可以使用
RedimArray(arr,1,5,1,2)’不保留值
我们都知道在VBA第一维就是行数是不能重定义的,现在VB.NET中使用框架行数,行数列数均可重定义
ReDimArrayPreserve (arr,1,5,1,2)’’保留值重定义
这样一段非0小标的VBA代码,就可以很轻松的转换为VB.NET代码
否则我们需要在多处修改数组的上下标取值问题,移植代码时极易出错
一维数组非0下标问题
‘VBA中的 Dim arr(1 to 10) 如下改写即可
Dim arr=New ArrayOne(1,10)
一维数组初始化问题
VBA中我们使用 以下代码初始化一维数组
Arr=Array(1,2,3,4)
在.net这种要改为
Arr={1,2,3,4}
也可以使用Excel880VSTO后直接改为
Arr=VBAArray(1,2,3,4)'只需要在VBA的基础上加一个VBA前缀即可
作业
把VBA175例中197节数组筛选, 改为VB.NET实现,用VSTO880框架实现一次,再 用0小标原生 .Net方法实现一次
郑广学VSTO教程购买方式
淘宝下单地址(支持花呗)
郑广学VSTO课程云课堂网址
登陆后可免费试学