testing空的Listobject头
如何testing一个Excel(Version> = 2010)的ListObject头是否为空?
如果我select这样一个空头 ,那么
?selection.value -> Column1 (or Spalte1, depending on client language) ?isEmpty(selection) -> false
所以就VBA而言,它performance得像一个非空单元。
非解决scheme:写入单元格,然后检查其值是否更改。
正如Doug Excel所说的,只是创build一个默认标题名称“Column1”。
如果你想读取列标题,你可以使用下面的代码。
Sub sample() Dim tbl As Object Set tbl = Sheets("sheet1").ListObjects("Table1") MsgBox Trim(tbl.ListRows(1).Range.Cells(0, 1)) End Sub
我们解决这个解决scheme。 工作簿上的某个位置插入一列ListObject(aka表),将标题留空。 给这个头名称emptyHeader 。
使用下面的函数,你现在可以检查一个给定的范围是否真的是空的,这是有空的单元格值或ListObject自动设置为空头的值。
解决scheme并不完美。 如果用户将第二列的标题值设置为Column42(英文),则该函数将错误地返回true。
Function isRealyEmpty(ra As Range) As Boolean If IsEmpty(ra.Value) Then isRealyEmpty= True Exit Function End If ' The value of the empty reference header emptyHeaderValue = ThisWorkbook.Names.Item("emptyHeader").RefersToRange.Value l = Len(emptyHeaderValue) - 1 targetValue = ra.Value If Left(emptyHeaderValue, l) = Left(targetValue, l) Then postFix = Right(targetValue, Len(targetValue) - l) isRealyEmpty= IsNumeric(postFix) Else isRealyEmpty= False End If End Function
这是一个简单的方法来testing一个单元格是否真的是空的。 我们testing原始值是否等于已清除的单元格的值。
这个解决scheme的缺点是我们必须修改工作簿,这在我们的案例中是不可接受的。
Function isRealyRealyEmpty(ra As Range) As Boolean v = ra.Formula ra.Formula = "" isRealyRealyEmpty = (ra.Formula = v) ra.Formula = v End Function