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

str*_*rks 14 excel vba excel-vba

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

vba如何知道usedRange?

Ber*_*ier 19

这是UsedRange(MSDN参考)的确切定义:

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

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

  1. .UsedRange - >在最外面的单元格周围"绘制"一个包含内容的框.
  2. .Columns - >选择这些单元格的整个列
  3. .Count - >返回一个对应于有多少列的整数(在此选择中)
  4. - 8 - >从前一个整数中减去8.

我假设VBA通过查找索引值最低和最高的非空单元来计算UsedRange.

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

  • 当然,还要学习如何使用即时窗口,debug.print,locals窗口等调试VBA ...它将帮助您解决一个问题的世界. (2认同)

Sid*_*out 5

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

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
Run Code Online (Sandbox Code Playgroud)