Office中国论坛/Access中国论坛

标题: [求助]如何自动查找工作表的数据范围? [打印本页]

作者: xinghaifuyun    时间: 2005-7-22 00:15
标题: [求助]如何自动查找工作表的数据范围?
我最近对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表格经常这样设置的),那么该程序只能捕捉到标题,而查找不到下面的数据,怎样才能解决这些问题呢?

小弟才疏学浅,只有拜托各位帮帮忙了。
作者: 晓月清风    时间: 2005-7-22 17:50
ActiveSheet.UsedRange.Select

'选定活动工作表中已经使用的范围

'然后,在这个SELECTION里面进行相关操作
作者: xinghaifuyun    时间: 2005-7-24 05:39
好的,谢谢!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3