列listobject中非空白单元格的vba变量范围

时间:2019-05-24 11:56:26

标签: excel vba range listobject nonblank

我有一个函数,该函数将Range作为变量,并运行范围内单元格的值。 我需要将范围传递给构建如下的taht函数:

Dim hltTbl As ListObject
Set hltTbl = ThisWorkbook.Sheets("classy").ListObjects(1)
Dim i As Integer
Dim lastrow As Integer
Dim highlightsRange As Range


'range is in highlights from 1 to the first empty
For i = 1 To hltTbl.ListRows.Count
    If hltTbl.ListColumns("highlights").DataBodyRange.iTem(i).Value = "" Then
       lastrow = i - 1
       Exit For
    End If
Next

Set highlightsRange = hltTbl.ListColumns("highlights").DataBodyRange.iTem(1).resize(lastrow,0)

这不起作用。 我假装是要建立一个由listobject列的所有非空白单元格组成的范围。 (请注意:单元格形成一个连续的单元,即非空白单元格之间没有空单元格)。 我确实找到了第一个非空单元格,这将是范围的最后一个单元格,然后我尝试使用reshape(lastrow,0)重塑列的第一个单元格的范围。 这是行不通的。

问题: a)我该怎么办 b)为什么这不起作用 c)(我试图不使用过滤器,这确实很痛苦)

非常感谢。

EDIT1: .SpecialCells(...似乎不包括非空格,而仅包括空格 编辑2: 这似乎可行:

 DataBodyRange.SpecialCells(xlCellTypeConstants, xlTextValues)

但是它的值是整数...

1 个答案:

答案 0 :(得分:0)

您应该这样调整大小:.resize(lastrow, 1),而不是.resize(lastrow, 0)。 原因是方法“ resize”占用所需范围大小的行数和列数。 任何范围至少具有1行和1列。