|
我最近对excel的宏命令很感兴趣,但发现要掌握很不容易,只能小打小闹地编些小程序,希望通过论坛提高我的编程水平,也希望大虾们能两肋插刀,帮小弟一把,谢谢啦![em01]
在编宏命令时,经常要访问一些工作表的数据,可不同的工作表数据范围有大有小,怎样才能自动捕捉有效的数据范围呢?我的思路是:
1.先用ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Select来捕捉工作表数据的最后一行;
2.从Cells(1,1)开始逐行逐列查找有数据的单元格(因为有些数据不一定从第一行第一列开始),直到查到不为空的单元格为止,选择该单元格;
3.用ActiveCell.CurrentRegion.Select 捕捉由空白行和空白列所包围的单元格区域。
编了一个子程序,不过觉得方法不简练,大虾们是否还有更好得更简单的程序呢? 请大虾们指正。
Sub SeekDate()
'子程序,查询工作表中数据的范围Range(Cells(Row1st,Col1st),Cells(Rowend,Colend))
'Row1st 数据区域中第一行的行号
'Col1st 数据区域中第一列的列号
'Rowend 数据区域中最后一行的行号
'Colend 数据区域中最后一列的列号
K = 1: Row1st = 0: Col1st = 0: Rowend = 0: Colend = 0: Z = 1: RowNum = 0: ColNum = 0
ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
ColNum = ActiveCell.Column
RowNum = ActiveCell.Row
Do Until K = RowNum
Z = 1
Do Until Z = ColNum
If Trim(Cells(K, Z)) <> "" Then
ActiveSheet.Cells(K, Z).Select
ActiveCell.CurrentRegion.Select
Z = ColNum
Row1st = Selection.Rows.Row
Col1st = Selection.Columns.Column
Rowend = Selection.Rows(Selection.Rows.Count).Row
Colend = Selection.Columns(Selection.Columns.Count).Column
K = RowNum - 1
Else: Z = Z + 1
End If
Loop
K = K + 1
Loop
End Sub
此程序还有几个问题:
1.当工作表是空白工作表时,就会出错;
2.当工作表的表头有标题时,就会在标题和数据行之间空出一行空白行(我们单位的excel表格经常这样设置的),那么该程序只能捕捉到标题,而查找不到下面的数据,怎样才能解决这些问题呢?
小弟才疏学浅,只有拜托各位帮帮忙了。 |
|