VBA问题,使用VBA,1维数组创建新的工作簿?

来自《别怕excel vba其实很简单》

  '将工作表中要汇总的记录保存在数组arr中;通过offset来确定复制区域的大小
}
每天一篇Excel技术图文

HI,大家好,我是星光。

上一期给大家分享了如何按指定名单批量创建工作簿,这期再给大家分享下如何按指定名单和模板批量创建工作簿。

如上图所示,有一张工作表提供了新建工作簿的名单,又有一个工作表名为"模板",作为新建工作簿的模板。则运行以下代码即可按指定名单和模板批量创建工作簿。

代码详细解释见注释……

打个响指,坦白的说,这段代码和上一期代码十分相似,简直是同父异母的哥俩好。第9行至第13行代码,指定名称为"模板"的工作表为新建工作簿的模板;如果当前工作簿查无此表,则退出程序。

第21行代码使用工作表的Copy方法复制一个工作表,但未指定复制后工作表的保存位置;我们上一章讲过,这种情况下,系统会将该工作表转换为活动工作簿

第22行代码将活动工作簿保存到指定路径下。第23至28行代码判断工作簿名称是否符合规则。其余代码和上一节代码并无二样,也就不需赘言。

}

1VBA数组的基础定义

  • 就是一组数/字符等用同一个名字(这个名字就是:数组名),作为一个整体存储在一起
  • 这些被保存在同一个数组名下的,多个内容,称为element 元素
  • 数组里的元素是可以重复的

1.3元素是怎么在数组内排序的?

  • 用什么来标识顺序呢?,就是index 
  • index  是一串连续的整数(也可以为负数),index必须 连续,整数,可以为正负
  • index默认是从0开始,但是不同的数组 赋值方式会导致index初始为0,或1
  • 逐个赋值?? 有区别吗?

理论上,从EXCEL对象导入的range一定是二维数组

如果导入是cells等可以试试

  • 动态数组:动态数组的维数,长度都不确定

区分的意义不是很大,一般都只用1维数组,2维数组,最多3维数组把。

4 用不同的方式 定义 和赋值 数组

4.1先定义为变量,再赋值为数组

  • 那么当变量被赋值为一个数组时
  • 变量名arr1就成了数组名,arr1()就表示是数组了
  • 当这个变量有又被赋值为其他内容时,就不再代表数组了
'赋值时,重大变化,arr1就是数组了,arr1也是数组名 '使用array函数,构造一个1维数组,然后赋值给变量。默认是从index的0开始 '变量仍然可以被赋值为其他内容
  • 要使用数组(也就是读,写的时候),数组必须 先界定维度和大小。
  • 方法2:直接给数组赋值(不光界定了维度和大小,还赋值了)
  • arr2=1 是错误的,数组不能再被赋值为1个数值!只能是数组!
  • 数组可以随意redim,改变维度,长度都可以
  • 就像数组可以被覆盖赋值一样
  • 除非 redim preserve 要保留数组之前的值,就得让新redim的内容,包含之前的index范围!

Dim arr2() '定义了一个动态数组,定义时重大变化,其中arr2就是数组名
'arr2() 和arr2这2个不是一个东西? 事实证明是一个东西
'由于arr2已经数数组,不能直接把1个值,赋值给数组,数组名的
'不管数组里有没有赋值,只要不preserve,数组随便redim
'redim 功能,其实和全部重新赋值一样
'写在这里会报错,后面这句 arr20(1) = 1 '动态数组没赋值前,是不能操作array的读和写的
 
  • 如果知道数组大小,可以一次redim到位
  • 适合不知道数组大小时,还可以多次redim

  • 动态数组,可以整体赋值,或单独赋值
  • 动态数组,单独赋值前,必须先 界定好数组,比如redim 或 arr1=array 等
  • 动态数组,可以随意,整体赋值,改变数组内容。但不能被赋值为非数组的变量值等

5.0 对数组的遍历存在2个思路

  • 思路2:或者直接遍历element

遍历index真正保险的写法是

'先学习1维数组,和数组赋值,以及取1维数组index和element Dim arr2() '定义了一个动态数组,定义时重大变化,其中arr2就是数组名 '使用array函数,构造一个1维数组,然后赋值给变量。默认是从index的0开始 '结论1:可以用变量,被赋值为一个数组 '获得数组元素的方法,可以遍历index,也可以直接遍历element 'arr2() 和arr2这2个不是一个东西? 事实证明是一个东西
}

我要回帖

更多关于 vba二维数组转一维 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信