ActivePheet.UsedRange.Columns.Count - 8在vba中的含义是什么?
vba如何知道usedRange?
答案 0 :(得分:19)
以下是UsedRange
(MSDN reference)的确切定义:
每个Worksheet对象都有一个UsedRange属性,该属性返回一个Range对象,该对象表示正在使用的工作表区域。 UsedRange属性表示工作表中最左上角和最左下角非空单元格描述的区域,并包括其间的所有单元格。
基本上,那条线的作用是:
.UsedRange
- >在最外面的单元格周围“画出”一个内容。.Columns
- >选择这些单元格的整个列.Count
- >返回一个整数,对应于有多少列(在此选择中)- 8
- >从前一个整数中减去8。我假设VBA通过查找索引值最低和最高的非空单元来计算UsedRange。
很有可能,您收到错误是因为您的范围内的行数小于3,因此返回的数字为负数。
答案 1 :(得分: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
答案 2 :(得分:1)
好像你想要四处走动。试试这个:
ActiveSheet.UsedRange.select
导致......
如果你想将这个选择移动3行,那么试试这个
ActiveSheet.UsedRange.offset(-3).select
这样做......
答案 3 :(得分:0)
我想如果你尝试:
Sub Macro3()
a = ActiveSheet.UsedRange.Columns.Count - 3
End Sub
使用a
上的手表,您会看到它确实有所作为。
答案 4 :(得分:0)
UsedRange不仅代表非空单元格,还代表没有任何值的格式化单元格。这就是你应该保持警惕的原因。