由于版本不同,Excel可处理的最大行和列都有一定的限制要求,如何来获取这些值来对编辑的程序进行容错处理,就显得十分重要。
本节主要介绍两个属性,可返回工作表的行和列。
上图是两个属性:Application.Columns 和 Application.Rows
如果熟悉VBA,对此也不会陌生,Application.Columns 返回一 个 Range 对象,该对象代表活动工作表上的所有列;Application.Rows返回一 个 Range 对象,该对象代表活动工作表上的所有行。
语法:
Application.Columns
Application.Rows
在不使用对象识别符的情况下使用此属性等效于使用 ActiveSheet.Rows,也就是当前工作表的行数。
上图是示例,返回当前工作表行数,然后定义一个数组,保存到数组中。
注意:这个数组大小是有一定要求的,并不是说把所有行都会保存在数组中,由于内存硬件的限制会出现内存会溢出错误。
如何对这个错误进行规避呢?可以使用一些错误提示机制来进行。
本例中用到另一个对象Err,可以在出现内存溢出的时候提前结束定义数组,也就实现了溢出前停止数组定义,那么多出的数据就不能进行数组处理了。
其实,从这一方来讲,VBA并不能完美地解决任何问题,特别是当数据量达到一个量级的时候就无法进行了。
这就和计算机的硬件有关了,并不是软件存在问题,如果硬件达到无限可能,软件实际上是没有边际的。
这也就是说Excel是一个相对轻量组的数据管理软件,对于更大数据处理就无能为力了。
那样的情况下可以转移到数据库当中进行处理,是真的好。
代码
Private Sub CommandButton1_Click()Dim rArr, ri As Long, R As Range, R1 As Range, R2 As Range, R3 As Range, Rs As RangeSet Rs = Application.Rows'返回行单元格Set R1 = ActiveSheet.Range("A1")Set R2 = ActiveSheet.Range("A2")Set R3 = ActiveSheet.Range("A3")ReDim rArr(0) For Each R In Rs On Error GoTo Ne100'如果出现错误 程序跳转到Ne100: ReDim Preserve rArr(ri)'重定义数组 rArr(ri) = R.Value'数组赋值 R1.Value = ri ri = ri + 1 Next RNe100:R2.Value = "当前数组有: " & UBound(rArr) & "个元素"R3.Value = "当前工作表有: " & Rs.Count & "个单元格行"MsgBox Err.Description & VBA.vbCrLf & Err.Number'输出错误提示Err.ClearErase rArr'释放数组Set Rs = NothingSet R = NothingThisWorkbook.SaveEnd Sub
如果没有研究,不建议调试上述代码,特别是在重要文件当中,虽然做了一些避免内存溢出处理方法,但是在多次调试过程当中,同样会出现内存溢出,导致Excel应用重启。