ActiveSheet.UsedRange.Columns.Count - 8是什么意思?

时间:2014-01-16 20:23:56

标签: excel vba excel-vba

ActivePheet.UsedRange.Columns.Count - 8在vba中的含义是什么?

vba如何知道usedRange?

5 个答案:

答案 0 :(得分:19)

以下是UsedRangeMSDN reference)的确切定义:

  

每个Worksheet对象都有一个UsedRange属性,该属性返回一个Range对象,该对象表示正在使用的工作表区域。 UsedRange属性表示工作表中最左上角和最左下角非空单元格描述的区域,并包括其间的所有单元格。

基本上,那条线的作用是:

  1. .UsedRange - >在最外面的单元格周围“画出”一个内容。
  2. .Columns - >选择这些单元格的整个列
  3. .Count - >返回一个整数,对应于有多少列(在此选择中)
  4. - 8 - >从前一个整数中减去8。
  5. 我假设VBA通过查找索引值最低和最高的非空单元来计算UsedRange。

    很有可能,您收到错误是因为您的范围内的行数小于3,因此返回的数字为负数。

答案 1 :(得分:5)

BernardSaucier已经给你一个答案。我的帖子不是答案,而是解释为什么你不应该使用UsedRange

HERE

所示,

UsedRange非常不可靠

要查找包含数据的最后一列,请使用.Find然后从中减去。

With Sheets("Sheet1")
    If Application.WorksheetFunction.CountA(.Cells) <> 0 Then
        lastCol = .Cells.Find(What:="*", _
                      After:=.Range("A1"), _
                      Lookat:=xlPart, _
                      LookIn:=xlFormulas, _
                      SearchOrder:=xlByColumns, _
                      SearchDirection:=xlPrevious, _
                      MatchCase:=False).Column
    Else
        lastCol = 1
    End If
End With

If lastCol > 8 Then
    'Debug.Print ActiveSheet.UsedRange.Columns.Count - 8

    'The above becomes

    Debug.Print lastCol - 8
End If

答案 2 :(得分:1)

好像你想要四处走动。试试这个:

ActiveSheet.UsedRange.select

导致......

enter image description here

如果你想将这个选择移动3行,那么试试这个

ActiveSheet.UsedRange.offset(-3).select

这样做......

enter image description here

答案 3 :(得分:0)

我想如果你尝试:

  
Sub Macro3()
a = ActiveSheet.UsedRange.Columns.Count - 3
End Sub  

使用a上的手表,您会看到它确实有所作为。

答案 4 :(得分:0)

UsedRange不仅代表非空单元格,还代表没有任何值的格式化单元格。这就是你应该保持警惕的原因。