问题描述
我将数据格式化为表格,而我想做的是在特定列中选择一个单元格范围,无论这些单元格是否有数据。表中的行数将改变,这就是为什么我需要使用动态范围的原因。
除了从第二个单元格到最后一个单元格的范围之外,我还设法选择了表列的整个数据主体范围。我一直在使用臭名昭著的.Select
来突出显示单元格/范围以确认代码有效,但是随后我将其删除了。如果可以,我计划将条件格式宏应用于范围(我已经准备好代码,只需要用这段代码设置范围)即可。
我一直努力将范围缩小到表格列的倒数第二个单元格。
到目前为止我所拥有的:
Sub SelectRange()
Dim LC As ListColumn
Dim SecondCell As Long
Dim LastCell As Long
Dim SecondtoLastCell As Long
Set LC = Worksheets("On-going").ListObjects("Table4").ListColumns("Redos (no.)")
'Choosing the table column with the header "Redos (no.)",works like a charm
With LC
SecondCell = .DataBodyRange(2)
'Choosing the second cell of the column,no problem
SecondtoLastCell = .Range(.DataBodyRange.Rows.Count)
'Choosing the second to last cell of the column. Came by this accidentally while trying everything,I have no idea why it works.
~~~Insert Range.Here
'THE PROBLEM IS CREATING A RANGE FROM SecondCell TO SecondtoLastCell
End With
End Sub
我觉得我已经尝试了所有可能性,包括Range(SecondCell & SecondtoLastCell).Select
和Range(SecondCell,Range(SecondtoLastCell)).Select
。通常发生的是,仅在列标题行的上方上选择了一个单元格(“重做(no。)”。无法确定。
我觉得这是一个简单的问题,但是我再也看不到森林换树木了-尽管我知道Excel表格在后面很痛苦。
任何指向正确方向的指针都将受到赞赏!
干杯, 艾玛
解决方法
一种选择是在此处使用Range.Resize
:
Set LC = Worksheets("On-going").ListObjects("Table4").ListColumns("Redos (no.)")
With LC.DataBodyRange
Dim myRange As Range
Set myRange = .Cells(2).Resize(.Rows.Count - 2)
End With
,
谢谢@BigBen!如此优雅的解决方案。
我在Set myRange = .Cells(2).Resize(.Rows.Count - 2)
上找到了射程点。