1.7 VBA数组转换到VB.NET的非零下标问题

611 次浏览

VB.Net中数组都是0下标开始, 无法直接声明1小标的数组了,相信这是我们很多同学从VBA过渡到VB.NET第一个大难关, 特别是很多历史VBA代码转换的时候, 会花费很多的时间,针对这个问题,我给大家提供了更便捷的解决方案,可以在VB.NET中继续使用1小标的二维数组,原来的VBA代码非零下标数组可直接移植使用!

小目标

学会VBA数组到VB.NET数组的转换方式

视频讲解

1.7 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小标的数组

file
现在借助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下标问题

file

‘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课程云课堂网址
登陆后可免费试学