用户必须选择一个或多个数据列,然后在我的vba代码中使用数组。如果用户选择列字母,他将获得整个列,数据和空白单元格。除了通过数组之外,还有一种方法可以在选择整列时只获取该列中的数据。
我有这样的代码:
Set user_range = ActiveWindow.RangeSelection
points = user_range.value
i = LBound(points, 1)
count = UBound(points, 1) - i + 1
我感谢任何人都可以提供帮助!
谢谢,
拉斯
答案 0 :(得分:1)
这是可能的背景。
1)如果Selection
只能包含常量:
Dim user_range As Range
Dim points
On Error Resume Next
Set user_range = Selection.SpecialCells(xlCellTypeConstants)
On Error GoTo 0
If Not user_range Is Nothing Then points = user_range.Value
2)如果Selection
只能包含公式:
Dim user_range As Range
Dim points
On Error Resume Next
Set user_range = Selection.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not user_range Is Nothing Then points = user_range.Value
3)如果Selection
可以包含两个常量和公式:
Dim rng1 As Range, rng2 As Range, user_range As Range
Dim points
On Error Resume Next
Set rng1 = Selection.SpecialCells(xlCellTypeConstants)
Set rng2 = Selection.SpecialCells(xlCellTypeFormulas)
On Error GoTo 0
If Not rng1 Is Nothing And Not rng2 Is Nothing Then
Set user_range = Union(rng1, rng2)
ElseIf Not rng1 Is Nothing Then
Set user_range = rng1
ElseIf Not rng2 Is Nothing Then
Set user_range = rng2
End If
If Not user_range Is Nothing Then points = user_range.Value
4)如果要剪切未使用的部分(从未使用过的部分),可以尝试使用以下代码(但在很多情况下,它不可靠,因为UsedRange
包含至少使用过一次的所有单元格,例如,如果从单元格中删除值,则此单元格将为空,但仍为UsedRange
的一部分):
Dim user_range As Range
Set user_range = Intersect(UsedRange, Selection)
If Not user_range Is Nothing Then points = user_range.Value