您的位置:首页 > 编程语言 > VB

关于 Excel 2003 vba usedrange属性

2015-06-04 20:31 519 查看

关于 Excel 2003 vba usedrange属性

vba usedrange属性

如果您想知道当前工作表中所有已使用的单元格区域的大小,或者您想引用当前工作表中已使用的区域,那么您可能就要想到UsedRange属性了。

UsedRange属性应用于Worksheet对象,返回指定工作表中已使用区域的Range对象,即返回工作表中已使用的单元格区域。因此,该属性也可以用于选取单元格区域。

下面用一个简单的例子来说明UsedRange属性的功能。如下图1所示的工作表:




图1:一个带有数据的工作表

然后,在VBE编辑器中输入如下代码:

Sub Sample01()

  Worksheets("Sheet1").UsedRange.Select

End Sub

代码运行后,上面的工作表显示如下图2所示:




图2:代码运行后的工作表

即在指定工作表中(本例为工作表Sheet1)已使用范围被全部选中。可以看出,UsedRange属性返回工作表中所有已使用范围的单元格区域,而不管该区域数据间是否有空行或空格。
UsedRange属性的一些常见用法

(1) 返回工作表中已使用区域的行数或列数

语句Activesheet.UsedRange.Rows.count返回当前工作表中已使用单元格区域的行数。同样,语句Activesheet.UsedRange.Columns.count返回当前工作表中已使用单元格区域的列数。在上例中,您可以在调试窗口中输入下面语句,将返回相应的值。

?Activesheet.UsedRange.Rows.count

20

?Activesheet.UsedRange.Columns.count

4

一般写法为<在此输入引用对象>.UsedRange.Rows.Count和<在此输入引用对象>.UsedRange.Columns.Count。

(2) 返回工作表中已使用单元格区域的地址

语句Activesheet.UsedRange.Address 返回当前工作表已使用单元格区域的地址。在上例中,您可以在调试窗口中输入下面语句,将返回已使用单元格区域地址为$A$1:$D$20。

?Activesheet.UsedRange.Address

$A$1:$D$20

一般写法为<在此输入引用对象>.UsedRange.Address

(3) 设置工作表中已使用单元格区域对象,并进行引用或操作。如下代码所示:

Dim cellRange As Range,RowNum As Long,ColNum As Long

Set cellRange=Worksheets(“Sheet1”).UsedRange ‘设置已用单元格区域并赋值给变量

RowNum=cellRange.Rows.Count ‘已用单元格区域的行数

ColNum=cellRange.Columns.Count ‘已用单元格区域的列数

UsedRange属性示例

现在,我们举几个例子,进一步说明UsedRange属性的用法。

[示例一]下面的程序在活动工作表已使用单元格区域中,当该区域不包含任何公式时,清除该区域不能打印的字符。其中,ActiveSheet.UsedRange 代表当前工作表中已使用单元格区域组成的Range对象。(By Chip Pearson)

Sub CleanUp()

  Dim TheCell As Range

  For Each TheCell In ActiveSheet.UsedRange

    With TheCell

      If .HasFormula = False Then

        .Value = Application.WorksheetFunction.Clean(.Value)

      End If

    End With

  Next TheCell

End Sub

[示例二]下面的程序将当前工作表中已用单元格区域或所选单元格中第一个字符删除,其中,ActiveSheet.UsedRange.Address代表当前工作表中已用单元格区域的地址。

Public Sub Delete_First_Character(Optional ByRef objRange As Range = Nothing)

  Dim objCell As Range

  On Error Resume Next

  If (objRange Is Nothing) Then

     Set objRange = Application.InputBox(Prompt:="请选择单元格区域", _

        Title:="删除第一个字符", _

        Type:=8, _

        Default:=ActiveSheet.UsedRange.Address) '设置缺省选区为已用区域

  End If

  Err.Clear

  Set objRange = objRange.SpecialCells(xlCellTypeConstants)

  If (Err.Number <> 0&) Or (objRange Is Nothing) Then

    MsgBox "在指定的单元格区域中没有符合要求的单元格.", _

    vbExclamation Or vbOKOnly, _

    ActiveWorkbook.Name

    Exit Sub

  End If

  On Error GoTo Exit_Delete_First_Character

  Application.ScreenUpdating = False

  For Each objCell In objRange

    objCell = Mid$(objCell, 2)

  Next objCell

Exit_Delete_First_Character:

  On Error Resume Next

  Application.ScreenUpdating = True

End Sub

[示例三]在本示例中,当您在工作表的E列中的单元格中输入“finish”后,点击右侧按钮,将会对此行用指定的背景色进行标识,如图3和图4。




图3:在E8单元格中输入“finish”




图4:点击按钮后的效果

当您删除单元格E6中的数据,如下图5所示。




图5:删除单元格E6中的数据



图6:点击按钮后的效果

本示例中按钮所附加的代码如下,其中,UsedRange.Rows.Count表示当前工作表中已使用区域的行数。

Private Sub CommandButton1_Click()

  Dim r As Long

  For r = UsedRange.Rows.Count To 1 Step -1

    If Range("E" & r) = "finish" Then _

      Range("A:G").Rows(r).Interior.ColorIndex = 10

    Next r

  For r = UsedRange.Rows.Count To 1 Step -1

    If Range("E" & r) = "" Then _

      Range("A:G").Rows(r).Interior.ColorIndex = 2

  Next r

End Sub

[提示]您可以将此代码放置在工作表变化事件中,这样,当工作表变化时,符合条件的相应行会自动标记背景色。

[示例四]本示例演示了删除行操作,即在活动工作表已使用单元格区域中,若某单元格中包含有“AND”(如为ANDXXX或XXXANDXX或XXXAND等,不区分大小写),则删除该单元格所在行。ActiveSheet.UsedRange.Find(what)表示在当前工作表所有已使用单元格区域中查找含有变量what中的内容的单元格,程序代码如下:(by Patrick Molloy)

Sub Find_AND()

  Dim rng As Range

  Dim what As String

  what = "AND"

  Do

    Set rng = ActiveSheet.UsedRange.Find(what)

    If rng Is Nothing Then

      Exit Do

    Else

       Rows(rng.Row).Delete

    End If

  Loop

End Sub

[提示]您可以更改程序中所查找的字符,从而实现您所想要的目的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vba usedrange